网站认证费用,网站维护工程师工资,wordpress百度云网盘,查看网站流量前文地址#xff1a; 001 SpringCloudAlibaba整合 - Nacos注册配置中心、Sentinel流控、Zipkin链路追踪、Admin监控 文章目录 8.Feign远程调用、loadbalancer负载均衡整合1.OpenFeign整合1.引入依赖2.启动类添加EnableFeignClients注解3.yml配置4.日志配置5.远程调用测试6.服务…前文地址 001 SpringCloudAlibaba整合 - Nacos注册配置中心、Sentinel流控、Zipkin链路追踪、Admin监控 文章目录 8.Feign远程调用、loadbalancer负载均衡整合1.OpenFeign整合1.引入依赖2.启动类添加EnableFeignClients注解3.yml配置4.日志配置5.远程调用测试6.服务降级7.重试配置服务端异常捕获8.连接池配置 2.Loadbalancer负载均衡测试1.复制客户端2.修改端口启动3.测试4.修改负载均衡算法 8.Feign远程调用、loadbalancer负载均衡整合
1.OpenFeign整合
1.引入依赖
注意由于openfeign高版本使用loadbalancer负载均衡而不是ribbon所以需要引入loadbalancer依赖排除ribbon否则会报错
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId
/dependency
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-loadbalancer/artifactId
/dependency dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactIdexclusionsexclusiongroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-ribbon/artifactId/exclusion/exclusions/dependency
2.启动类添加EnableFeignClients注解
3.yml配置
#由于feign高版本使用loadbalancer负载均衡排除了ribbon,所以超时时间不能使用ribbon配置
feign:#开启feign对sentinel支持sentinel:enabled: true#feign gzip压缩配置compression:request:enabled: true# 配置压缩的类型mime-types: text/xml,application/xml,application/json# 最小压缩值min-request-size: 2048response:enabled: trueclient:config:#服务名称cloud-production:# 连接超时时间connectTimeout: 90000# 请求处理超时时间readTimeout: 90000# default 全局配置可以用服务名配置单个服务default:#日志级别BASIC就是最基本的请求和响应信息loggerLevel: BASICspringboot全局压缩配置
server:# gzip压缩配置compression:min-response-size: 512mime-types: application/json,application/xml,text/html,text/xml,text/plainexcluded-user-agents: gozilla,traviataenabled: true4.日志配置
方式一
#日志收集
logging:#feign日志配置level:com.moshangshang.cloud.clean.feign.ProductionFeign: debug #扫描的是你那个service的类全类名也可扫包方式二
feign:client:config:default:#日志级别BASIC就是最基本的请求和响应信息loggerLevel: BASIC方式三
Configuration
public class FeignConfig {/*** feign日志配置*/Beanpublic Logger.Level feignLogLevel(){return Logger.Level.BASIC; // 日志级别为BASIC}}单个远程调用使用
FeignClient(value cloud-production,configuration FeignConfig.class)全局使用
EnableFeignClients(defaultConfiguration FeignConfig.class)5.远程调用测试
1.fegin调用接口
FeignClient(value cloud-production,configuration FeignConfig.class)
public interface ProductionFeign {GetMapping(/cloud-production/test1)String test1();}2.调用方法
RestController
RequestMapping(/cloud-clean)
public class CleanController {Autowiredprivate ProductionFeign productionFeign;GetMapping(/test1)public void test1(){String s productionFeign.test1();System.out.println(远程调用接收到的数据s);}}3.被调用服务方法
RestController
RequestMapping(/cloud-production)
public class ProductionController {GetMapping(/test1)public String test1(){System.out.println(test1 被调用了);return 111;}}4.测试结果 6.服务降级
1.编写降级工厂类
/*** 服务降级*/
Slf4j
Component
public class ProductionFallbackFactory implements FallbackFactoryProductionFeign {Overridepublic ProductionFeign create(Throwable cause) {log.error(服务异常。。。。。。。。。。。。。。。。。。。 cause);return new ProductionFeign() {Overridepublic String test1() {return Fallback回滚;}};}
}2.使用
FeignClient(value cloud-production,fallbackFactory ProductionFallbackFactory.class)7.重试配置服务端异常捕获
Slf4j
Configuration
public class FeignConfiguration {/*** 自定义重试机制*/Beanpublic Retryer feignRetryer() {//最大请求次数为5初始间隔时间为100ms下次间隔时间1.5倍递增重试间最大间隔时间为1sreturn new Retryer.Default();}/*** 客户端捕获服务端异常*/Beanpublic ErrorDecoder feignError() {return (key, response) - {if (response.status() 400) {log.error(请求xxx服务400参数错误,返回:{}, response.body());}if (response.status() 409) {log.error(请求xxx服务409异常,返回:{}, response.body());}if (response.status() 404) {log.error(请求xxx服务404异常,返回:{}, response.body());}// 其他异常交给Default去解码处理// 这里使用单例即可Default不用每次都去newreturn new ErrorDecoder.Default().decode(key, response);};}}
FeignClient(value cloud-production,fallbackFactory ProductionFallbackFactory.class,configuration MyConfiguration.class)8.连接池配置
!--使用连接池--dependencygroupIdio.github.openfeign/groupIdartifactIdfeign-httpclient/artifactId/dependency
feign:httpclient:# 支持httpClient的开关enabled: true#最大连接数max-connections: 200# 单个路径的最大连接数max-connections-per-route: 502.Loadbalancer负载均衡测试
1.复制客户端 2.修改端口启动 3.测试 默认轮询方式调用
4.修改负载均衡算法
1.创建核心配置类
Configuration
public class RestTemplateConfig {BeanLoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}BeanReactorLoadBalancerServiceInstance randomLoadBalancer(Environment environment,LoadBalancerClientFactory loadBalancerClientFactory) {// 获取负载均衡器的名称String name environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);// 创建并返回一个随机负载均衡器实例return new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);}}2.使用
LoadBalancerClient(value cloud-production, configuration RestTemplateConfig.class)自带三个算法轮询随机和nacos