SC Alibaba20211019 Nacos 手写LoadBalancer LoadBalancerClient
1、provider
2、 手写LoadBalancer
3、实例
1)、provider2004
2)、consumer2018 手写LoadBalancer
i)、pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
ii)、application.properties
# 应用名称
spring.application.name=consumer2018
# 应用服务 WEB 访问端口
server.port=2018
# Nacos帮助文档: https://nacos.io/zh-cn/docs/concepts.html
# Nacos认证信息
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
# Nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
# 注册到 nacos 的指定 namespace,默认为 public
spring.cloud.nacos.discovery.namespace=public
iii)、LoadBalancer
public interface LoadBalancer {
ServiceInstance getSingleAddres(List<ServiceInstance> serviceInstances);
}
iiii)、RotationLoadBalancer
@Component
public class RotationLoadBalancer implements LoadBalancer{
private AtomicInteger atomicInteger=new AtomicInteger(0);
@Override
public ServiceInstance getSingleAddres(List<ServiceInstance> serviceInstances) {
int index=atomicInteger.incrementAndGet()%serviceInstances.size();
return serviceInstances.get(index);
}
}
iiiii)、Consumer2018Application
@SpringBootApplication
public class Consumer2018Application {
public static void main(String[] args) {
SpringApplication.run(Consumer2018Application.class, args);
}
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
iiiiii)、OrderService
@RestController
public class OrderService {
@Autowired
private DiscoveryClient discoveryClient;
@Autowired
private RestTemplate restTemplate;
@Autowired
private LoadBalancer loadBalancer;
@Resource
private LoadBalancerClient loadBalancerClient;
@RequestMapping("/orderToMember")
public String orderToMember(){
List<ServiceInstance> instances=discoveryClient.getInstances("provider2004");
ServiceInstance serviceInstance=instances.get(0);
String rpcMemberUrl2=serviceInstance.getUri().toString();
String result2=restTemplate.getForObject(rpcMemberUrl2+"/hello/123131321312",String.class);
String rpcMemberUrl=loadBalancer.getSingleAddres(instances).getUri().toString();
String result=restTemplate.getForObject(rpcMemberUrl+"/hello/123131321312",String.class);
ServiceInstance serviceInstance1=loadBalancerClient.choose("provider2004");
String rpcMemberUrl3=serviceInstance1.getUri().toString()+"/hello/123131321312";
return "调用provider2004 返回结果:"+result;
}
}
参考:https://www.cnblogs.com/songjilong/p/12752115.html
转https://www.cnblogs.com/liujinhui/p/15195448.html