做品牌网站找谁怎么制作营销网站模板

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

做品牌网站找谁,怎么制作营销网站模板,做网站用盗版PS,怎么入驻电商平台Spring Cloud openfeign对Feign进行了增强#xff0c;使其支持Spring MVC注解#xff0c;另外还整合了Ribbon和Nacos#xff0c;从而使得Feign的使用更加方便 优势#xff0c;openfeign可以做到使用HTTP请求远程服务时就像洞用本地方法一样的体验#xff0c;开发者完全感…Spring Cloud openfeign对Feign进行了增强使其支持Spring MVC注解另外还整合了Ribbon和Nacos从而使得Feign的使用更加方便 优势openfeign可以做到使用HTTP请求远程服务时就像洞用本地方法一样的体验开发者完全感知不到这是远程方法更感知不到这是个 http请求它像 Dubbo一样consumer 直接洞用接口方法调用 povider,而不需要通过常规的 Htp Client构造请求再解析返回数据。它解决了让开发者调用远程接口就跟调用本地方法一样无需关注与远程的交互细节更无需关注分布式环境开发 pom导入依赖 dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId /dependency在bootstrap.yml中增加OpenFeign对Sentinel的支持增加feign.sentinel.enabled配置项 server:port: 9001 spring:application:name: consumer # 应用名cloud:nacos:discovery:server-addr: localhost:8848 # nacos服务地址sentinel:transport:port: 8719 # 启动http server并且该服务与Sentinel仪表板进行交互使sentinel可以控制应用若端口占用则87191依次扫描dashboard: 127.0.0.1:8080 # 仪表版访问地址 feign: # 增加对sentinel的支持sentinel:enabled: true 这里说一下如果不加feign.sentinel.enabledtrue的配置那么在FeignClient中定的fallback属性定义的异常、限流等自定义的处理逻辑不会生效 将FeignClient抽取为独立模块并且把接口有关的POJO实体类、默认的Feign配置都放到这个模块中提供给所有消费者使用将其做成公共模块其他服务只需要依赖该jar包 在主启动类上加入EnableFeignClients注解标记为启用OpenFeign具体如下 SpringBootApplication EnableDiscoveryClient EnableFeignClients public class OrderNacosApplication{public static void main(String[] args) {SpringApplication.run(OrderNacosApplication.class, args);} }假如是分布式项目将openfeign抽取为一个单独的服务模块时可能出现我openfeign中的包名和其他模块不一致可以自己声明FeignClient组件的basePackages设置一下FeignClient的扫描路径。示例如下 SpringBootApplication EnableDiscoveryClient //这种方式是精准打击只拿指定的类 //EnableFeignClients(clients {UserDemo.class}) //这种方式会将指定包下的所有东西都拿过来 EnableFeignClients(basePackages com.alibaba.provider.feigns) public class OrderNacosApplication{public static void main(String[] args) {SpringApplication.run(OrderNacosApplication.class, args);} }OpenFeign的超时配置 PsOpenFeign早期版本例如 2020版本以前 要求服务提供方在1秒内处理业务逻辑并返回响应。如果超过1秒没有返回OpenFeign会直接报错不会等待服务执行。随着版本的更新OpenFeign已经对此做出了调整或优化例如 2021.0.1) 方法一修改超时时间在远程调用方的 application.yml 中配置指定某个服务提供方的调用超时时间 feign:client:config:product-service: # 服务名connect-timeout: 5000 # 配置指定服务连接超时时间read-timeout: 5000 # 配置指定服务等待超时时间stock-nacos: # 服务名connect-timeout: 5000 # 配置指定服务连接超时时间read-timeout: 5000 # 配置指定服务等待超时时间在远程调用方的 application.yml 中配置指定所有服务提供方的调用超时时间 feign:client:config:default: # 所有服务connect-timeout: 5000 # 配置指定服务连接超时时间read-timeout: 5000 # 配置指定服务等待超时时间方法二配置类 package com.test.order.config;import feign.Request; import org.springframework.context.annotation.Bean;/*** Description:* Author: xu* Data: 2024-2024/4/10-21* Version: V1.0///Configuration //注意: 此处配置configuration注解就会全局生效如果想指定对应微服务生效就不能配置 public class FeignTimeOutConfig {Beanpublic Request.Options options() {return new Request.Options(5000, 10800);} } OpenFeign日志有以下几个级别 NONE:无记录默认的BASIC:只记录请求方法和url及响应状态代码和执行时间HEADERS:只记录基本信息及请求和响应头FULL:记录请求和响应的头文件正文和元数据信息最全 方法一配置文件方式设置OpenFeign日志要查看openfeign日记设置开启openfeign日记和设置feign配置日记级别缺一不可推荐 #开启 openfeign 日志 logging:level:com.test.order.feign: debug #这样打印的就只有openfeign的debug日记#全局生效 feign:client:config:default: # 所有服务生效logger-level: FULL#局部生效 feign:client:config:product-service: #服务名logger-level: basicstock-nacos: #服务名logger-level: full如果配置类设置配置文件也设置谁设置全局就是日记级别 方法二java代码方式设置OpenFeign日志 package com.test.order.config;import feign.Logger; import org.springframework.context.annotation.Bean;/** Description:* Author: xu* Data: 2024-2024/4/10-17* Version: V1.0*/ //Configuration //注意: 此处配置configuration注解就会全局生效如果想指定对应微服务生效就不能配置 public class FeignClientConfiguration {Beanpublic Logger.Level feignLogLevel(){return Logger.Level.FULL; //一般使用 BASIC 级别因为太多的日志信息影响效率} } 全局设置OpenFeign日志级别如果FeignClientConfiguration类加了注解Configuration就无需设置以下的defaultConfiguration 属性 EnableFeignClients(defaultConfiguration FeignClientConfiguration.class) 指定服务设置OpenFeign日志级别如果FeignClientConfiguration类加了注解Configuration就无需设置以下的configuration 属性 FeignClient(value stock-nacos,path /stock,configuration {FeignClientConfiguration.class}) public interface StockFeignService {RequestMapping(/reduce)String reduce();}Feign 的性能优化 Feign 的底层客户端实现 URLConnection默认实现不支持连接池Apache HttpClient 支持连接池OKHttp支持连接池 因此优化Feign的性能主要包括 使用连接池代替默认的URLConnection日志级别最好用basic或none因此使用 HttpClient 或 OKHttp 代替 URLConnection 引入依赖 !–httpClient的依赖 – dependencygroupIdio.github.openfeign/groupIdartifactIdfeign-httpclient/artifactId /dependency配置连接池 feign:client:config:default: # default全局的配置loggerLevel: BASIC # 日志级别BASIC就是基本的请求和响应信息 httpclient:enabled: true # 开启feign对HttpClient的支持max-connections: 200 # 最大的连接数max-connections-per-route: 50 # 每个路径的最大连接数实现负载均衡OpenFeign也具有负载均衡的功能多个服务端时采用对应的算法寻找一个服务端进行请求 具体的添加LoadBalancerClient注解在调用服务的Service类上添加LoadBalancerClient注解并指定服务名。这样负载均衡器将根据配置的属性来选择合适的服务实例进行调用。例如 /**

  • name指定调用rest接口所对应的服务名
  • path 指定调用rest接口所在的stockController指定的eRequestMapping
  • 类上无需添加Component注解 / FeignClient(value stock-nacos, path /stock) public interface StockFeignService{ RequestMapping(/reduce)String reduce(); }package com.test.order.config;import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.loadbalancer.core.RandomLoadBalancer; import org.springframework.cloud.loadbalancer.core.ReactorLoadBalancer; import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier; import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory; import org.springframework.context.annotation.Bean; import org.springframework.core.env.Environment;public class CustomLoadBalancerConfiguration {BeanReactorLoadBalancerServiceInstance randomLoadBalancer(Environment environment,LoadBalancerClientFactory loadBalancerClientFactory) {String name environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);return new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class),name);}}在你提供的代码示例中CustomLoadBalancerConfiguration 类并没有标记 Configuration 注解但它仍然可以作为一个配置类并且被 LoadBalancerClients 注解指定的负载均衡客户端所引用。这是因为 Spring Cloud 在处理 LoadBalancerClients 注解时会扫描指定的配置类并且将其中的 Bean 方法注册为 bean。因此虽然 CustomLoadBalancerConfiguration 类没有标记 Configuration 注解但它仍然被识别为一个配置类并且其中的 Bean 方法会被注册为 bean。这样做的好处是你可以将负载均衡的配置与负载均衡客户端的注册分开使得代码更加清晰和模块化。 package com.test.order;import com.test.order.config.CustomLoadBalancerConfiguration; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClient; import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClients; import org.springframework.cloud.openfeign.EnableFeignClients;/** Description:* Author: xu* Data: 2024-2024/3/29-16* Version: V1.0/ SpringBootApplication EnableFeignClients LoadBalancerClients({LoadBalancerClient(value stock-nacos, configuration {CustomLoadBalancerConfiguration.class})}) public class OrderOpenFeignApplication {public static void main(String[] args) {SpringApplication.run(OrderOpenFeignApplication.class, args);} } 修改契约配置支持Feign原生的注解注意:修改契约配置后OrderFeignService 不再支持springmvc的注解需要使用Feign原生的注解 package com.test.order.config;import feign.Contract; import org.springframework.context.annotation.Bean;/** Description:* Author: xu* Data: 2024-2024/4/10-21* Version: V1.0/Component不要使用该注解会变成全局 public class ContractConfig {Beanpublic Contract feigncontract() {return new Contract.Default();} } 方法一局部配置那个服务使用锲约 FeignClient(value stock-nacos, path /stock ,configuration {ContractConfig.class}) public interface StockFeignService {RequestLine(GET /reduce)String reduce();}方法二配置文件设置指定服务使用锲约 #局部生效 feign:client:config:product-service:logger-level: basicstock-nacos:logger-level: fullcontract: feign.Contract.Default #指定Feign原生注解契约配置 openfeign拦截器 定义openfeign拦截器继承RequestInterceptor 接口 package com.test.order.interceptor;import feign.RequestInterceptor; import feign.RequestTemplate;/** Description:* Author: xu* Data: 2024-2024/4/10-21* Version: V1.0/ public class CustomFeignAuthRequestInterceptor implements RequestInterceptor {Overridepublic void apply(RequestTemplate requestTemplate) {System.out.println(openfeign拦截器执行了);requestTemplate.header(token,888);} } 方法一使用配置类实现openfeign的拦截器 package com.test.order.config;import com.test.order.interceptor.CustomFeignAuthRequestInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;/** Description:* Author: xu* Data: 2024-2024/4/10-21* Version: V1.0*/ //Configuration //注意: 此处配置configuration注解就会全局生效如果想指定对应微服务生效就不能配置 public class FeignInterceptorConfig {Beanpublic CustomFeignAuthRequestInterceptor feignAuthRequestInterceptor(){return new CustomFeignAuthRequestInterceptor();} } 全局设置OpenFeign拦截器如果FeignClientConfiguration类加了注解Configuration就无需设置以下的defaultConfiguration 属性 EnableFeignClients(defaultConfiguration FeignInterceptorConfig .class) 指定服务设置OpenFeign拦截器如果FeignInterceptorConfig 类加了注解Configuration就无需设置以下的configuration 属性 FeignClient(value stock-nacos,path /stock,configuration {FeignInterceptorConfig .class}) public interface StockFeignService {RequestMapping(/reduce)String reduce();}方法二配置文件的yml实现openfeign的拦截器 feign:client:config:stock-nacos:request-interceptors:- com.test.order.interceptor.CustomFeignAuthRequestInterceptor