宿州网站建设推广十大免费行情软件入口下载

当前位置: 首页 > news >正文

宿州网站建设推广,十大免费行情软件入口下载,企业网站管理系统 php,做网站标题目录前言SpringCloud Feign远程服务调用一.远程调用逻辑图二.两个服务的yml配置和访问路径三.使用RestTemplate远程调用四.构建Feign五.自定义Feign配置六.Feign配置日志七.Feign调优八.抽离Feign前言 微服务分解成多个不同的服务#xff0c;那么多个服务之间怎么调用呢… 目录前言SpringCloud Feign远程服务调用一.远程调用逻辑图二.两个服务的yml配置和访问路径三.使用RestTemplate远程调用四.构建Feign五.自定义Feign配置六.Feign配置日志七.Feign调优八.抽离Feign前言 微服务分解成多个不同的服务那么多个服务之间怎么调用呢 Spring Cloud最新面试题 Spring Cloud Nacos详解之注册中心 Spring Cloud Nacos详解之配置中心 Spring Cloud Nacos详解之集群配置 Spring Cloud Eureka详解 Spring Cloud Ribbon详解 Spring Cloud Gateway详解 Spring Cloud Hystrix详解 SpringCloud Feign远程服务调用 一.远程调用逻辑图 现在有两个服务订单服务(服务消费者)和用户服务(服务提供者)分别对应不同的数据库。 注意 因为远程调用都是服务消费者调用服务提供者所以配置和业务编写都在服务消费者里面。
二.两个服务的yml配置和访问路径 用两个不同的数据库模拟部署在两台服务器的数据库订单yml配置 访问路径GetMapping(order/{orderId}) server:port: 8082 spring:datasource:url: jdbc:mysql://localhost:3306/cloud_order?useSSLfalseusername: rootpassword: rootdriver-class-name: com.mysql.jdbc.Driverapplication:name: orderservice //订单服务的名称用户yml配置 访问路径GetMapping(user/{id}) server:port: 8081 spring:datasource:url: jdbc:mysql://localhost:3306/cloud_user?useSSLfalseusername: rootpassword: rootdriver-class-name: com.mysql.jdbc.Driverapplication:name: userservice //用户服务的名称三.使用RestTemplate远程调用 1.注入RestTemplate /*** 因为启动类本身也是一个配置了所以我们在启动类进行注入,你自己自定义配置类注入也行* 创建RestTemplate并注入Spring容器*/BeanLoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}2.编写远程调用 Autowiredprivate RestTemplate restTemplate;public Order queryOrderById(Long orderId) {// 根据订单id查询订单Order order orderMapper.findById(orderId);// 利用RestTemplate发起http请求根据用户id查询用户// url路径 http://服务名称(上面配置了)/请求路径/参数String url http://localhost:8081/user/ order.getUserId();// 发送http请求实现远程调用现在是get请求类型User user restTemplate.getForObject(url, User.class);// 封装user到Orderorder.setUser(user);// 返回值return order;}3.RestTemplate的缺点 参数复杂URL难以维护。不符合正常接口调用的格式。 四.构建Feign 1.引入依赖 !–feign客户端依赖–dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId/dependency2.在启动类使用注解开启Feign功能 SpringBootApplication EnableFeignClients public class OrderApplication { }3.编写远程调用 //服务名称 FeignClient(value userservice) public interface UserClient {GetMapping(/user/{id})User findById(PathVariable(id) Long id);}4.调用接口 Autowiredprivate UserClient userClient;public Order queryOrderById(Long orderId) {// 根据订单id查询订单Order order orderMapper.findById(orderId);// 用Feign远程调用User user userClient.findById(order.getUserId());// 封装user到Orderorder.setUser(user);// 返回return order;}5.Feign还集成了Ribbon所以我们不用考虑负载均衡问题 五.自定义Feign配置 类型作用说明feign.Logger.Level修改日志级别四种不同的级别:NONE(没有任何日志)、BASIC(发起请求的开始结束时间)、HEADERS(会记录请求头请求体)、FULL(请求和响应信息)feign.codec.Decoder响应结果的解析器http远程调用的结果做解析例如解析json字符串为java对象feign.codec.Encoder请求参数编码将请求参数编码便于通过http请求发送feign. Contract支持的注解格式默认是SpringMVC的注解feign. Retryer失败重试机制请求失败的重试机制默认是没有不过会使用Ribbon的重试 一般我们自定义配置的是日志 六.Feign配置日志 1.配置文件配置日志 //全局配置 feignclientconfigdefault//default全局配置远程调用的服务的接口也会打印。loggerLevelFULL //日志级别//局部配置 feignclientconfigorderservice//只打印服务名为orderservice的日志。loggerLevelFULL //日志级别2.代码方式配置日志 //第一步注入对象 public class DefaultFeignConfiguration {Beanpublic Logger.Level logLevel(){//日志级别return Logger.Level.BASIC;} }//第二步注解配置//全局配置 EnableFeignClients(defaultConfiguration DefaultFeignConfiguration.class)//局部配置 FeignClient(value userservice,confiquration FeignClientConfiguration.class)七.Feign调优 Feign底层客户端实现 URLConnection:默认实现不支持连接池。Apache HttpClient: 支持连接池。OKHttp:支持连接池。 1.使用连接池替代默认的URL Connection(使用HttpClient支持) ①pom文件引入依赖 !–引入HttpClient依赖–dependencygroupIdio.github.openfeign/groupIdartifactIdfeign-httpclient/artifactId/dependency②yml文件进行配置 feign:httpclient:enabled: true # 支持HttpClient的开关max-connections: 100 # 最大连接数max-connections-per-route: 25 # 单个路径的最大连接数2.日志级别最好是basic或none 八.抽离Feign 如果A、B、C服务都要调用D服务那我们要在A、B、C里面都使用Feign调用D吗如果写就造成了很多代码冗余所以我们要把Feign抽离出来放在一个公共的服务里面。我们新建一个Feign-api服务然后谁用谁就在pom文件引入一下。 注意 需要把调用的接口(加上FeignClient(vaule服务名)注解)和实体类写在公共的服务里面。 Feign-api结构目录 !–谁用谁引入引入feign的统一api–dependencygroupIdcn.xinxin.demo/groupIdartifactIdfeign-api/artifactIdversion1.0/version/dependency但是这样做会导致SpringBootApplication在扫描包时找不到定义FeignClient对象那么怎么解决呢 解决 方式一:指定FeignClient所在包 EnableFeignClients(basePackages cn.xinxin.feign.clients)方式二:指定FeignClient字节码 EnableFeignClients(clients {UserClient.class})Feign的pom文件 ?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdparentartifactIdcloud-demo/artifactIdgroupIdcn.xinxin.demo/groupIdversion1.0/version/parentmodelVersion4.0.0/modelVersionartifactIdfeign-api/artifactIdpropertiesmaven.compiler.source8/maven.compiler.sourcemaven.compiler.target8/maven.compiler.target/propertiesdependencies!–feign客户端依赖–dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId/dependency/dependencies /project示例 订单服务远程调用用户服务