title: SpringCloudAlibaba-2-nacos负载均衡、服务上下线、权重元信息
date: 2020-01-26 17:55:33
tags:

SpringCloudAlibaba

1.nacos服务上下线

我们通过nacos管理首页点击:下线

2.nacos负载均衡

nacos默认已经集成了ribbon作为负载均衡

实现负载均衡,修改2点:
1.consumer调用provider时候,我们直接改为服务名调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@RestController
public class TestController {
@Autowired
private RestTemplate restTemplate;
@Autowired
private LoadBalancerClient loadBalancerClient;
@GetMapping("/test")
public String test(String name){
return restTemplate.getForObject("http://nacos-discovery-provider/hello?name="+name, String.class);
}
}
```
2.RestTemplate添加注解(RestTemplate支持LoadBalanced):

@EnableDiscoveryClient
@SpringBootApplication
public class NacosDiscoveryConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(NacosDiscoveryConsumerApplication.class, args);
}
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}

1
2
3
4
5
6
3.再启动一个provider(8052)
![](https://raw.githubusercontent.com/startshineye/img/master/2020/01/22.png)
然后分别启动:8051、8052
测试:

curl ‘http://127.0.0.1:8050/test?name=qaws

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
![](https://raw.githubusercontent.com/startshineye/img/master/2020/01/23.png)
### 3.权重设置
我们在nacos的控制台可以设置nacos负载provider的权重,类似于nginx的流量分配,权重越大,访问到此服务的可能性越大。
![](https://raw.githubusercontent.com/startshineye/img/master/2020/01/24.png)
### 4.元数据
通过nacos的管理台,我们点击进去provider详情可以看到元数据
![](https://raw.githubusercontent.com/startshineye/img/master/2020/01/25.png)
很多时候我们会把一份代码一个微服务部署多个节点,多个节点的内容代码是一致的,通过一些元数据获取服务信息来区分这个微服务,可以通过这些描述信息做一些流量迁移。比如同一个微服务中A节点流量大一点,B节点流量少一点,通过这个元数据做区别
我们如何在代码里面获取元数据呢?
通过RibbonServer

@GetMapping(“/test”)
public String test(String name){
RibbonLoadBalancerClient.RibbonServer ribbonServer = (RibbonLoadBalancerClient.RibbonServer) loadBalancerClient.choose(“nacos-discovery-provider”);
NacosServer nacosServer = (NacosServer) ribbonServer.getServer();
Map metadata = nacosServer.getMetadata();
System.out.println(“—>”+metadata);
return restTemplate.getForObject(“http://nacos-discovery-provider/hello?name="+name, String.class);
}
```

输出:
—>{name=provider1}

参考:
https://my.oschina.net/giegie

毕业于<br>相信技术可以改变人与人之间的生活<br>码农一枚