1. 程式人生 > >springcloud系列9——Ribbon脫離Eureka使用

springcloud系列9——Ribbon脫離Eureka使用

前言

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
    }
}