前言
Eureka对远程服务发现提供了抽象,你不需要在客户端硬编码URL。但是,如果你不想在Ribbon中使用Eureka,也是非常简单的。
这里仍然以前面章节中的microservice-springcloud-movie进行测试。
在Ribbon中禁用Eureka
在application.yml中增加下面的配置:
ribbon:
eureka:
enabled: false
声明Ribbon客户端提供的服务列表
在application.yml中增加:
microservice-springcloud-user:
ribbon:
listOfServers: localhost:7902,localhost:7903
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
microservice-springcloud-user2:
ribbon:
listOfServers: localhost:7904,localhost:7905
在上面Ribbon客户端中定义的服务列表包括了microservice-springcloud-user和microservice-springcloud-user2两个服务,其中microservice-springcloud-user服务随机访问,microservice-springcloud-user2不配置则使用默认的轮询策略。
测试
- 1.启动Eureka Server;
- 2.启动microservice-springcloud-user的2个服务;
- 3.启动microservice-springcloud-user2的2个服务;
- 4.启动microservice-springcloud-movie。
测试1
浏览器中输入http://localhost:7901/test并刷新多次,查看控制台
可以看到microservice-springcloud-user随机访问的,microservice-springcloud-user2则是轮询。
测试2
如果在application.yml中不配置microservice-springcloud-user2,则访问http://localhost:7901/test会报错,但使用了eureka则不会。
直接使用Ribbon API
public class MyClass {
@Autowired
private LoadBalancerClient loadBalancer;
public void doStuff() {
ServiceInstance instance = loadBalancer.choose("stores");
URI storesUri = URI.create(String.format("http://%s:%s", instance.getHost(), instance.getPort()));
// ... do something with the URI
}
}
参考Spring Cloud官方文档第16.6到16.8章节。