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

可以做分析图的地图网站网站flash音乐播放器

可以做分析图的地图网站,网站flash音乐播放器,商城网站建设价格最优,什么是搜索引擎优化1. 引言 在spring cloud微服中#xff0c;feign远程调用可能是大家每天都接触到东西#xff0c;但很多同学却没咋搞清楚这里边的各种超时问题#xff0c;生产环境可能会蹦出各种奇怪的问题。 首先说下结论#xff1a; 1)只使用feign组件#xff0c;不使用ribbion组件feign远程调用可能是大家每天都接触到东西但很多同学却没咋搞清楚这里边的各种超时问题生产环境可能会蹦出各种奇怪的问题。 首先说下结论 1)只使用feign组件不使用ribbion组件其默认feign的连接超时是10s,读超时是60s; 2) 同时使用了feign和ribbion组件(1)若没有任何人为配置超时时间远程调用使用ribbion的默认超时时间连接超时、读超时都是1秒钟(2)若同时主动配置了feign 、ribbion的超时时间则使用配置的feign超时时间(3)若只主动配置了feign的超时时间则使用配置的feign超时时间(4)若只主动配置了ribbon超时时间则使用配置的ribbion超时时间。 2. only feign feign本身是通过FeignClientFactoryBean 创建出来的,feign的超时配置也在方法org.springframework.cloud.openfeign.FeignClientFactoryBean#configureUsingConfiguration中。此方法properties.isDefaultToProperties()的默认值是true,我们一般也不会去改它所以一般是执行红方框中的逻辑。(1)先执行全局配置configureUsingConfiguration(context, builder)(2)再执行属性配置类中FeignClientProperties的默认配置, (3)最后执行属性配置类FeignClientProperties中当前feign client特定的配置。这三个步骤的覆盖顺序是后者覆盖前者也就是越往后优先级越高。默认情况下我们未做任何配置时FeignClientProperties是空对象也就是说此时只会执行步骤(1)的属性配置。 全局属性配置方法org.springframework.cloud.openfeign.FeignClientFactoryBean#configureUsingConfiguration回到spring容器中去取超时配置对象Request.Options 自动配置类相应方法为我们配置了一个Request.Options对象(当spring容器中不存在此类型的bean时) 而LoadBalancerFeignClient.DEFAULT_OPTIONS的连接超时、读超时分别是10s、60s. public class LoadBalancerFeignClient implements Client {static final Request.Options DEFAULT_OPTIONS new Request.Options();//..... } public static class Options {private final long connectTimeout;private final TimeUnit connectTimeoutUnit;private final long readTimeout;private final TimeUnit readTimeoutUnit;private final boolean followRedirects;//......./*** Creates the new Options instance using the following defaults:* ul* liConnect Timeout: 10 seconds/li* liRead Timeout: 60 seconds/li* liFollow all 3xx redirects/li* /ul*/public Options() {this(10, TimeUnit.SECONDS, 60, TimeUnit.SECONDS, true);}//.......} 3. feignribbon 在feign引入ribbon负载均衡时远程调用的feign client会用LoadBalancerFeignClient. 在LoadBalancerFeignClient方法中有调用getClientConfig(options, clientName);的代码行而IClientConfig中包含有feign和ribbion超时时间。 getClientConfig方法参数中的options是feign本身的超时配置 可以看到当参数options等于DEFAULT_OPTIONS,即没有为feign主动配置超时时间这种情况这种情况会到容器用去获取超时配置当options不等于DEFAULT_OPTIONS即已经为feign主动配置了超时时间这种情况下我们会使用feign的超时时间。 IClientConfig getClientConfig(Request.Options options, String clientName) {IClientConfig requestConfig;if (options DEFAULT_OPTIONS) {requestConfig this.clientFactory.getClientConfig(clientName);}else {requestConfig new FeignOptionsClientConfig(options);}return requestConfig;}这个IClientConfig 在配置类org.springframework.cloud.netflix.ribbon.RibbonClientConfiguration的配置方法ribbonClientConfig执行config.loadProperties(this.name);将配置文件中ribbion的配置信息赋值到config对象后又执行了config.set(CommonClientConfigKey.ConnectTimeout, DEFAULT_CONNECT_TIMEOUT); 、 config.set(CommonClientConfigKey.ReadTimeout, DEFAULT_READ_TIMEOUT);重新将连接超时、读超时重置为1000毫秒即1秒。 SuppressWarnings(deprecation) Configuration(proxyBeanMethods false) EnableConfigurationProperties // Order is important here, last should be the default, first should be optional // see // https://github.com/spring-cloud/spring-cloud-netflix/issues/2086#issuecomment-316281653 Import({ HttpClientConfiguration.class, OkHttpRibbonConfiguration.class,RestClientRibbonConfiguration.class, HttpClientRibbonConfiguration.class }) public class RibbonClientConfiguration {/*** Ribbon client default connect timeout.*/public static final int DEFAULT_CONNECT_TIMEOUT 1000;/*** Ribbon client default read timeout.*/public static final int DEFAULT_READ_TIMEOUT 1000;/*** Ribbon client default Gzip Payload flag.*/public static final boolean DEFAULT_GZIP_PAYLOAD true;RibbonClientNameprivate String name client; BeanConditionalOnMissingBeanpublic IClientConfig ribbonClientConfig() {DefaultClientConfigImpl config new DefaultClientConfigImpl();config.loadProperties(this.name);config.set(CommonClientConfigKey.ConnectTimeout, DEFAULT_CONNECT_TIMEOUT);config.set(CommonClientConfigKey.ReadTimeout, DEFAULT_READ_TIMEOUT);config.set(CommonClientConfigKey.GZipPayload, DEFAULT_GZIP_PAYLOAD);return config;}//....}}我们在看看DefaultClientConfigImpl的怎么处理属性的。 可以看出上边RibbonClientConfiguration.ribbonClientConfig方法中设置的超时时间它们被放在DefaultClientConfigImpl#properties中的而取配置属性的底层方法都是getProperty(String key)所以在没有为feign配置超时时间时ribbon的取值时先取当前指定ribbon client的超时时间若不存在则取全局ribbon的超时时间若还是不存在则取DefaultClientConfigImpl#properties中的默认值1秒。 public class DefaultClientConfigImpl implements IClientConfig {Overridepublic T DefaultClientConfigImpl set(IClientConfigKeyT key, T value) {properties.put(key.key(), value);return this;}protected Object getProperty(String key) {//这里enableDynamicProperties一定是trueif (enableDynamicProperties) {String dynamicValue null;DynamicStringProperty dynamicProperty dynamicProperties.get(key);//dynamicProperty是nullif (dynamicProperty ! null) {dynamicValue dynamicProperty.get();}if (dynamicValue null) {//到配置文件中取当前client的clientName.ribbion.ReadTimeout这种格式的属性dynamicValue DynamicProperty.getInstance(getConfigKey(key)).getString();if (dynamicValue null) {//到配置文件中取全局ribbion.ReadTimeout这种格式的属性dynamicValue DynamicProperty.getInstance(getDefaultPropName(key)).getString();}}if (dynamicValue ! null) {return dynamicValue;}}//DefaultClientConfigImpl类中定义的默认值return properties.get(key);}}LoadBalancerFeignClient#execute 方法中的lbClient(clientName)创建了一个负载均衡器RetryableFeignLoadBalancer且此负载均衡期中的config就是上边RibbonClientConfiguration#ribbonClientConfig配置方法中所对应的IClientConfig. private FeignLoadBalancer lbClient(String clientName) {return this.lbClientFactory.create(clientName);} public FeignLoadBalancer create(String clientName) {FeignLoadBalancer client this.cache.get(clientName);if (client ! null) {return client;}IClientConfig config this.factory.getClientConfig(clientName);ILoadBalancer lb this.factory.getLoadBalancer(clientName);ServerIntrospector serverIntrospector this.factory.getInstance(clientName,ServerIntrospector.class);client this.loadBalancedRetryFactory ! null? new RetryableFeignLoadBalancer(lb, config, serverIntrospector,this.loadBalancedRetryFactory): new FeignLoadBalancer(lb, config, serverIntrospector);this.cache.put(clientName, client);return client;}现在回到LoadBalancerFeignClient#execute方法块调用负载均衡的 return lbClient(clientName) .executeWithLoadBalancer(ribbonRequest, requestConfig).toResponse();的核心实现RetryableFeignLoadBalancer#execute FeignLoadBalancer是RetryableFeignLoadBalancer的父类型构造RetryableFeignLoadBalancer时调用的构造方法new RetryableFeignLoadBalancer(lb, config, serverIntrospector, this.loadBalancedRetryFactory)会调用父类的public FeignLoadBalancer(ILoadBalancer lb, IClientConfig clientConfig, ServerIntrospector serverIntrospector) 方法而RibbonClientConfiguration#ribbonClientConfig配置方法中所对应的IClientConfig会传入此构造方法的clientConfig参数因此这里的this.connectTimeout this.readTimeout都是ribbon的超时时间。 configOverride是feign超时配置或ribbon超时配置而ribbon.connectTimeout(this.connectTimeout)中this.connectTime超时参数是作为默认值的所以说ribbon超时参数是会被覆盖掉它的优先级低(feign、ribbon超时参数同时存在时)
http://www.hkea.cn/news/14434897/

相关文章:

  • 做电商自建网站怎样淘宝客怎么做网站管理
  • 做游戏网站的需求分析音乐网站设计外国
  • 市建设局网站的综合业务管理平台免费推广软件 推广帮手
  • 资源网站建设网站信息推广的策略有哪些
  • 推广网站哪里好oa管理系统软件
  • 深圳专业网站建设免费送域名空间福建建设银行官方网站
  • 有没有网站可以做地图威海 网站建设
  • 网站 微信开发外链网
  • 东莞网站建设找谁如何用ftp做网站
  • 人才网站建设方案网站开发的安全问题
  • 06627网页制作和网站建设试卷如何进行网络推广和宣传
  • php官网网站建设开发板是单片机吗
  • 淘宝客网站怎么做的人少了企业网银app下载
  • 佛山手机网站建设公司常德网站建
  • 做网站是什么编程巢湖网站设计
  • 网站建设知识论文wordpress添加项目
  • 网站源文件修改网站制作 成功案例
  • 推荐做网站的话术郑州网站建设up188
  • ai可以做网站吗工作证明怎么弄
  • 微信商城网站建设视频福建企业年报网上申报入口
  • 广州网站建设哪家公司wordpress调用用户自定义头像
  • m开头的手机网站怎么做爱的网站
  • 做视频找素材的网站有哪些哪个网站的课件做的好处
  • 云南省建设厅定额网站无锡微信手机网站制作
  • 丽水专业做网站国外html5游戏网站
  • 公司国际网站怎么做wordpress301改不回来
  • 建设能源官方网站重庆建设网站的公司哪家好
  • 深圳网站建设软件开发兼职做网站访问量和数据
  • 网站制作网站建站品牌设计公司是做什么的
  • 做网站教程视频建工e采网