Spring Cloud Netflix之为上一个damo添加Ribbon(负载均衡优化)

1.声明

当前内容基于上面的一个demo进行负载均衡优化(说白了就是优化获取访问的url)

上一个demo为:eureka的多个服务相互调用的demo

由于上一个demo中出现了重复,需要通过DiscoveryClient获取当前的一个需要调用的服务实例ServiceInstance,然后拼接url实现访问操作(这个操作是重复的,基本每个访问中都存在这个问题)

所以这里就看看spring的负载均衡都干了什么,并且查看如何实现的,优化了哪些东西

2.pom配置和部分App门面访问的优化

为目前的AppDemo中的pom文件添加负载均衡优化

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>

为当前的RestTemplate的@Bean上面添加@LoadBalanced注解

	@Autowired
	RestTemplate restTemplate;

	@Bean
	@LoadBalanced // 开启负载均衡
	public RestTemplate restTemplate() {
		return new RestTemplate();
	}

重写前面的getPermiss方法

@RequestMapping("getPermiss")
	public String getPermiss(String roleName) {
		System.out.println("访问App门面中通过角色名称获取用户权限");
		/*
		 * List<ServiceInstance> instances = client.getInstances("permiss" +
		 * SUFIX_STRING); ServiceInstance serviceInstance = instances.get(0); String
		 * string = serviceInstance.getUri().toString();
		 */
		ResponseEntity<String> postForEntity = restTemplate.getForEntity("http://permiss" + SUFIX_STRING + "/getPermissByRoleName?roleName={1}",
				String.class, roleName);
		String body = postForEntity.getBody();
		return body;
	}

3.测试getPermiss

在这里插入图片描述

发现照样访问成功!

4.分析RestTemplate都做了什么

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,最后变成之前的操作,完成调用

5.总结

1.通过使用负载均衡后的RestTemplate,发现其优化了我们找到可以执行的url的地方,优化了我们大量的冗余代码

2.所谓的@LoadBalanced,其实就是为RestTemplate注入了一个负载均衡的拦截器,将所有操作进负载均衡操作(所以其他的也可以进行优化操作)

以上纯属个人见解,如有问题请联本人

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值