springcloud系列9——Ribbon脱离Eureka使用

前言

Eureka对远程服务发现提供了抽象,你不需要在客户端硬编码URL。但是,如果你不想在Ribbon中使用Eureka,也是非常简单的。
这里仍然以前面章节中的microservice-springcloud-movie进行测试。

在Ribbon中禁用Eureka

在application.yml中增加下面的配置:

1
2
3
ribbon:
eureka:
enabled: false

声明Ribbon客户端提供的服务列表

在application.yml中增加:

1
2
3
4
5
6
7
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

1
2
3
4
5
6
7
8
9
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章节。

Donny wechat
欢迎关注我的个人公众号
打赏,是超越赞的一种表达。
Show comments from Gitment