天天看點

Eureka服務注冊與發現Eureka服務注冊與發現

Eureka服務注冊與發現

一、服務注冊

注冊Eureka的服務非常的簡單,隻需要引入

spring-cloud-starter-netflix-eureka-client

的jar包即可。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
           

當然,我們要在配置檔案中指明注冊中心的位址:

server:
  port: 8100
spring:
  application:
    name: service-order
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
           

我們為了簡單,注冊中心用的是單機,大家也可以使用叢集方式。

我們啟動這個應用,它就是将自己的ip位址、端口、應用名稱等資訊向注冊中心注冊。我們可以打開注冊中心的管理背景看到:

控制台

我們service-user服務已經注冊成功了。

隻要我們引入了

spring-cloud-starter-netflix-eureka-client

的jar包,它就使得我們的應用即是

Eureka執行個體(instance,是服務的提供者)又是Eureka的用戶端(client,可以注冊中心發現其他的服務位址)。

Spring Cloud的服務提供和發現是在一起的,這有别于我們認識的其他的服務架構(如:dubbo)。既然服務的提供

和發現是在一起的,我們來看一看怎麼發現其他服務,并完成調用。

二、服務的調用

我們已經引入了

spring-cloud-starter-netflix-eureka-client

的jar包,就可以從注冊中心找到其他的服務。

我們這裡寫個遠端調用的例子供大家參考:

@RequestMapping("remote")
public class RemoteController {

    @Autowired
    private DiscoveryClient discoveryClient;

    @RequestMapping("order")
    public Order remoteOrder(){
        List<ServiceInstance> instances = discoveryClient.getInstances("SERVICE-ORDER");
        String url = instances.get(0).getUri()+"/order/detail";
        RestTemplate restTemplate = new RestTemplateBuilder().build();
        Order order = restTemplate.getForObject(url, Order.class);
        return order;
    }
}
           

其中,“SERVICE-ORDER”是我們order服務中的

spring.application.name

的名字,

discoveryClient

通過服務的名稱找到對應的位址。

我們可以看到它傳回的是一個List,這說明我們的服務可以搭建叢集,我們取服務中的第一個位址,并通過

RestTemplate

進行調用。

這種方法是比較原始的方法,Spring Cloud給我們封裝更簡便的Feign,它可以更友善的調用服務,并提供了負載均衡政策,這是我們下一張要講的内容。

至此,Eureka服務注冊與發現就介紹完了,示例位址:

https://github.com/liubo-tech/spring-cloud-eureka