1.查看控制台
DynamicServerListLoadBalancer for client permiss-service-provider initialized: DynamicServerListLoadBalancer:{NFLoadBalancer:name=permiss-service-provider,current list of Servers=[localhost:2003],Load balancer stats=Zone stats: {defaultzone=[Zone:defaultzone; Instance count:1; Active connections count: 0; Circuit breaker tripped count: 0; Active connections per server: 0.0;] }
,Server stats: [[Server:localhost:2003; Zone:defaultZone; Total Requests:0; Successive connection failure:0; Total blackout seconds:0; Last connection made:Thu Jan 01 08:00:00 CST 1970; First connection made: Thu Jan 01 08:00:00 CST 1970; Active Connections:0; total failure count in last (1000) msecs:0; average resp time:0.0; 90 percentile resp time:0.0; 95 percentile resp time:0.0; min resp time:0.0; max resp time:0.0; stddev resp time:0.0]
]}ServerList:org.springframework.cloud.netflix.ribbon.eureka.DomainExtractingServerList@6694da5d
发现当前的RestTemplate还是自动获取了当前的ServiceInstance集合(主要通过permiss-service-provider,就是服务名称),然后通过负载均衡算法选出一个调用的url,最后通过url方式进行调用
2.查看这个RestTemplate中具有什么东西
发现这个类中有一个拦截器链
发现这个拦截器链中具有负载均衡拦截器
3.查看该注解的描述@LoadBalanced
Annotation to mark a RestTemplate bean to be configured to use a LoadBalancerClient
所以可以大胆的猜测,SpringCloud通过查看当前的@LoadBalanced方式为当前的RestTemplate的Bean注入LoadBalancerInterceptor拦截器,然后我们在调用的时候,通过这个拦截器进行分析操作,负载算法等一系列操作,最后找到需要调用的url,最后变成之前的操作,完成调用
1.通过使用负载均衡后的RestTemplate,发现其优化了我们找到可以执行的url的地方,优化了我们大量的冗余代码
2.所谓的@LoadBalanced,其实就是为RestTemplate注入了一个负载均衡的拦截器,将所有操作进负载均衡操作(所以其他的也可以进行优化操作)
以上纯属个人见解,如有问题请联本人
1.声明当前内容基于上面的一个demo进行负载均衡优化(说白了就是优化获取访问的url)上一个demo为:eureka的多个服务相互调用的demo由于上一个demo中出现了重复,需要通过DiscoveryClient获取当前的一个需要调用的服务实例ServiceInstance,然后拼接url实现访问操作(这个操作是重复的,基本每个访问中都存在这个问题)所以这里就看看spring的负载均衡...
报错内容如下:
2020-08-29 00:26:51.232 WARN 43067 --- [io-20000-exec-6] o.s.c.n.z.filters.post.SendErrorFilter : Error during filtering
com.netflix.zuul.exception.ZuulException: Forwarding error
Caused by: com.netflix.client.ClientException: null
Caused by..
Ribbon自定义
负载均衡策略有两种方式,一是JavaConfig,一是通过配置文件(yml或properties文件)。
假设我有包含A和B服务在内的多个微服务,它们均注册在
一个Eureka上,信息如下:
我希望当访问服务A时候,2个服务(端口分别是8087和8081)每两次一换,比如访问两次8087,再访问两次8081,如此反复。
当访问服务B时,与A类似,不过是3次一换。
Ribbon 是
一个客户端
负载均衡器,赋予了应用一些支配 HTTP 与 TCP 行为的能力,由此可以得知,这里的客户端
负载均衡也是进程内
负载均衡的一种。
Ribbon 在
SpringCloud 生态内的不可缺少的组件,没有了
Ribbon,服务就不能横向扩展。Feign、Zuul 已经集成了
Ribbon。
1.
Ribbon负载均衡策略
Ribbon 中提供了七种
负载均衡策略
1. Spring Cloud Alibaba 介绍
下图是 Spring Cloud 官网给出的架构图,可以看到这个图中间就是各个微服务的实现,周边是去围绕这些微服务进行治理的支持性功能,例如分布式追踪、服务注册、配置服务等。
Spring Cloud 是以微服务为核心的分布式系统的一个构建标准,而Spring Cloud Alibaba是 Spring Cloud 标准的实现,目前 Spring Cloud Alibaba 成为了 Spring Cloud 家族中最受关注的框架。
上图中深色的部分,
status 404 reading EmployeeServiceINF#findAll()
ServerList:org.
springframework.
cloud.
netflix.
ribbon.eureka.DomainExtractingServerList@4d2c12ad
2019-02-26 15...