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

重庆公司网站设计制作每一天做网站

重庆公司网站设计制作,每一天做网站,石家庄网站快速排名,官网的网站建设公司背景 从SpringCloud 2020 版本之后#xff0c;组件移除了除 Eureka 以外#xff0c;所有 Netflix 的相关#xff0c;包括最常用的 Ribbon Hystrix 等#xff0c;所以 SpringCloud 在 spring-cloud-commons 提供了Loadbalancer 用来替代 Ribbon。本系列就来介绍Loadbalance…背景 从SpringCloud 2020 版本之后组件移除了除 Eureka 以外所有 Netflix 的相关包括最常用的 Ribbon Hystrix 等所以 SpringCloud 在 spring-cloud-commons 提供了Loadbalancer 用来替代 Ribbon。本系列就来介绍Loadbalancer 的执行流程 项目版本: Spring-Boot2.6.13Spring-Cloud 2021.0.5spring-cloud-alibaba 2021.0.5.0Loadbalancer 3.1.5 从项目中最常用的Feign来当做入口不了解Feign的原理也没有关系直接从Feign和Loadbalancer 的集成部分分析即可 分析 入口处 FeignBlockingLoadBalancerClient public class FeignBlockingLoadBalancerClient implements Client {private static final Log LOG LogFactory.getLog(FeignBlockingLoadBalancerClient.class);private final Client delegate;private final LoadBalancerClient loadBalancerClient;private final LoadBalancerClientFactory loadBalancerClientFactory;Overridepublic Response execute(Request request, Request.Options options) throws IOException {//请求路径final URI originalUri URI.create(request.url());//获取到要调用的服务idString serviceId originalUri.getHost();DefaultRequestRequestDataContext lbRequest new DefaultRequest(new RequestDataContext(buildRequestData(request), hint)); SetLoadBalancerLifecycle supportedLifecycleProcessors LoadBalancerLifecycleValidator.getSupportedLifecycleProcessors(//在这步创建了每个服务的子容器 loadBalancerClientFactory.getInstances(serviceId, LoadBalancerLifecycle.class),RequestDataContext.class, ResponseData.class, ServiceInstance.class);supportedLifecycleProcessors.forEach(lifecycle - lifecycle.onStart(lbRequest)); //执行loadBalancer的负载均衡策略返回将过滤后的服务非常重要ServiceInstance instance loadBalancerClient.choose(serviceId, lbRequest);org.springframework.cloud.client.loadbalancer.ResponseServiceInstance lbResponse new DefaultResponse(instance);//省略...//将ServiceInstance进行解析后转换为真正的http方式进行远程调用服务String reconstructedUrl loadBalancerClient.reconstructURI(instance, originalUri).toString();Request newRequest buildRequest(request, reconstructedUrl);LoadBalancerProperties loadBalancerProperties loadBalancerClientFactory.getProperties(serviceId);return executeWithLoadBalancerLifecycleProcessing(delegate, options, newRequest, lbRequest, lbResponse,supportedLifecycleProcessors, loadBalancerProperties.isUseRawStatusCodeInResponseData());}protected Request buildRequest(Request request, String reconstructedUrl) {return Request.create(request.httpMethod(), reconstructedUrl, request.headers(), request.body(),request.charset(), request.requestTemplate());}private String getHint(String serviceId) {LoadBalancerProperties properties loadBalancerClientFactory.getProperties(serviceId);String defaultHint properties.getHint().getOrDefault(default, default);String hintPropertyValue properties.getHint().get(serviceId);return hintPropertyValue ! null ? hintPropertyValue : defaultHint;}}可以看到在OpenFeign中调用了loadBalancerClient.choose(serviceId, lbRequest)来实现负载均衡策略然后返回过滤后的服务ServiceInstance也就是服务的对象。我们要重点分析此过程 首先分析loadBalancerClient是怎么注入进来的呢我们先看下其结构 ServiceInstanceChooser public interface ServiceInstanceChooser {ServiceInstance choose(String serviceId);T ServiceInstance choose(String serviceId, RequestT request);}LoadBalancerClient public interface LoadBalancerClient extends ServiceInstanceChooser {T T execute(String serviceId, LoadBalancerRequestT request) throws IOException;T T execute(String serviceId, ServiceInstance serviceInstance, LoadBalancerRequestT request) throws IOException;URI reconstructURI(ServiceInstance instance, URI original);}可以看到ServiceInstanceChooser定义了负载均衡的方法 LoadBalancerClient则继承了ServiceInstanceChooser额外定义了execute执行和reconstructURI构建真正http请求的方法 那么LoadBalancerClient的实现是谁呢刚才的疑问中又是怎么被注入的呢其实LoadBalancerClient的实现是BlockingLoadBalancerClient在配置类BlockingLoadBalancerClientAutoConfiguration中被注入 这里既然提到了自动装配配置类那么我们就需要看下其结构来了解各个作用 # AutoConfiguration org.springframework.boot.autoconfigure.EnableAutoConfiguration\ org.springframework.cloud.loadbalancer.config.LoadBalancerAutoConfiguration,\ org.springframework.cloud.loadbalancer.config.BlockingLoadBalancerClientAutoConfiguration,\ org.springframework.cloud.loadbalancer.config.LoadBalancerCacheAutoConfiguration,\ org.springframework.cloud.loadbalancer.security.OAuth2LoadBalancerClientAutoConfiguration,\ org.springframework.cloud.loadbalancer.config.LoadBalancerStatsAutoConfigurationLoadBalancerAutoConfiguration 是最核心最重要的配置随后会详细的分析BlockingLoadBalancerClientAutoConfiguration 上文中提高的LoadBalancerClient的实现类BlockingLoadBalancerClient就是在此装配的 BlockingLoadBalancerClientAutoConfiguration Configuration(proxyBeanMethods false) LoadBalancerClients AutoConfigureAfter(LoadBalancerAutoConfiguration.class) AutoConfigureBefore({ org.springframework.cloud.client.loadbalancer.LoadBalancerAutoConfiguration.class,AsyncLoadBalancerAutoConfiguration.class }) ConditionalOnClass(RestTemplate.class) public class BlockingLoadBalancerClientAutoConfiguration {BeanConditionalOnBean(LoadBalancerClientFactory.class)ConditionalOnMissingBeanpublic LoadBalancerClient blockingLoadBalancerClient(LoadBalancerClientFactory loadBalancerClientFactory) {return new BlockingLoadBalancerClient(loadBalancerClientFactory);}//省略}可以看到注入了LoadBalancerClient的实现类BlockingLoadBalancerClient。但此自动配置类的装配有很多的规则 LoadBalancerClients 此注解非常重要实现每个服务间的负载均衡配置隔离就是通过此注解后面会详细的分析AutoConfigureAfter(LoadBalancerAutoConfiguration.class)在LoadBalancerAutoConfiguration之后进行装配LoadBalancerAutoConfiguration也很重要后面也会详细的分析AutoConfigureBefore({ org.springframework.cloud.client.loadbalancer.LoadBalancerAutoConfiguration.class, AsyncLoadBalancerAutoConfiguration.class }) 在org.springframework.cloud.client.loadbalancer.LoadBalancerAutoConfiguration和AsyncLoadBalancerAutoConfiguration之前进行装配。注意2和3中的LoadBalancerAutoConfiguration不是一个对象2中的是在spring-cloud-loadbalancer模块中3中的是在spring-cloud-commons模块中这也是有步骤2的原因毕竟肯定是要先装配本模块下的ConditionalOnClass(RestTemplate.class)这个不是重点可以略过ConditionalOnBean(LoadBalancerClientFactory.class) 在注入时依赖了LoadBalancerClientFactoryLoadBalancerClientFactory也非常的重要后面也会进行详细的分析 上面多次提到了LoadBalancerAutoConfiguration自动装配中也有它那么现在就来分析下其流程 LoadBalancerAutoConfiguration Configuration(proxyBeanMethods false) LoadBalancerClients EnableConfigurationProperties(LoadBalancerClientsProperties.class) AutoConfigureBefore({ ReactorLoadBalancerClientAutoConfiguration.class,LoadBalancerBeanPostProcessorAutoConfiguration.class }) ConditionalOnProperty(value spring.cloud.loadbalancer.enabled, havingValue true, matchIfMissing true) public class LoadBalancerAutoConfiguration {//依赖了LoadBalancerClientSpecification类型的对象集合private final ObjectProviderListLoadBalancerClientSpecification configurations;public LoadBalancerAutoConfiguration(ObjectProviderListLoadBalancerClientSpecification configurations) {this.configurations configurations;}BeanConditionalOnMissingBeanpublic LoadBalancerZoneConfig zoneConfig(Environment environment) {return new LoadBalancerZoneConfig(environment.getProperty(spring.cloud.loadbalancer.zone));}ConditionalOnMissingBeanBeanpublic LoadBalancerClientFactory loadBalancerClientFactory(LoadBalancerClientsProperties properties) {LoadBalancerClientFactory clientFactory new LoadBalancerClientFactory(properties);//LoadBalancerClientSpecification类型的配置类集合对象注入到NamedContextFactory实现个性化配置clientFactory.setConfigurations(this.configurations.getIfAvailable(Collections::emptyList));return clientFactory;}}可以看到此配置类的装配规则也比较复杂但大部分都和本系列要分析的内容关联性不大直接略过即可我们只关心两个地方 LoadBalancerClients 这个注解出现多次我们会做详细的分析注入了loadBalancerClientFactory这个也非常的重要随后会做详细的分析 到这里我们要解决的三个重点 LoadBalancerClients的作用ObjectProviderListLoadBalancerClientSpecification configurations的作用LoadBalancerClientFactory的作用别忘了负载均衡的执行对象BlockingLoadBalancerClient在生成时将此对象注入了进去 下一篇文章我们进行详细分析
http://www.w-s-a.com/news/717303/

相关文章:

  • 网站导航容易做黄冈网站建设报价
  • 美橙互联建站网站被截止徐州网站建站
  • 网站班级文化建设视频深圳企业网页设计公司
  • 钦州网站建设公司做宣传网站买什么云服务器
  • 58同城有做网站wordpress怎么改标题和meta
  • 安通建设有限公司网站东莞地铁app
  • 群晖nas做网站滨州教育平台 网站建设
  • 住房城市乡建设部网站装修平台有哪些
  • 小米网站 用什么做的深圳广告公司前十强
  • 勤哲网站开发视频瑞安 网站建设培训
  • 有个蓝色章鱼做标志的网站高端的网站建设怎么做
  • 建站网址导航hao123html网页设计实验总结
  • 西宁市网站建设价格丽水集团网站建设
  • 长宁怎么做网站优化好本机怎么放自己做的网站
  • 诚信网站备案中心网站字体怎么设置
  • 企业网站建设费是无形资产吗佛山网站建设哪个好点
  • 网站建设就业方向国开行网站毕业申请怎么做
  • 创建一个网站的费用wordpress 4.0 安装
  • 会员登录系统网站建设dw软件是做什么用的
  • 手机网站被做跳转长沙网上购物超市
  • 网站建设中网站需求分析设计网站推荐html代码
  • 容易收录的网站台州汇客网站建设
  • 企业网站源码百度网盘下载网站备案号如何查询密码
  • 个人网站建设课程宣传栏制作效果图
  • 自己做的网站能上传吗网上做彩票网站排名
  • 教育培训网站模板下载自己做商务网站有什么利弊
  • 平面设计公司网站兰州室内设计公司排名
  • 个人工作室注册条件温州seo结算
  • 360免费建站系统中国建设银行官网站黄金部王毅
  • 罗源福州网站建设个体户可以网站备案吗