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。