Eureka服務注冊與發(fā)現(xiàn)
一奏甫、服務注冊
注冊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/
我們?yōu)榱撕唵危灾行挠玫氖菃螜C葫哗,大家也可以使用集群方式。
我們啟動這個應用球涛,它就是將自己的ip地址劣针、端口、應用名稱等信息向注冊中心注冊亿扁。我們可以打開注冊中心的管理后臺看到:
我們service-user服務已經(jīng)注冊成功了捺典。
只要我們引入了spring-cloud-starter-netflix-eureka-client
的jar包,它就使得我們的應用即是
Eureka實例(instance从祝,是服務的提供者)又是Eureka的客戶端(client襟己,可以注冊中心發(fā)現(xiàn)其他的服務地址)。
Spring Cloud的服務提供和發(fā)現(xiàn)是在一起的牍陌,這有別于我們認識的其他的服務框架(如:dubbo)擎浴。既然服務的提供
和發(fā)現(xiàn)是在一起的,我們來看一看怎么發(fā)現(xiàn)其他服務毒涧,并完成調(diào)用贮预。
二、服務的調(diào)用
我們已經(jīng)引入了spring-cloud-starter-netflix-eureka-client
的jar包契讲,就可以從注冊中心找到其他的服務仿吞。
我們這里寫個遠程調(diào)用的例子供大家參考:
@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,這說明我們的服務可以搭建集群银伟,我們?nèi)》罩械牡谝粋€地址务傲,并通過RestTemplate
進行調(diào)用。
這種方法是比較原始的方法枣申,Spring Cloud給我們封裝更簡便的Feign售葡,它可以更方便的調(diào)用服務,并提供了負載均衡策略忠藤,這是我們下一張要講的內(nèi)容挟伙。
至此,Eureka服務注冊與發(fā)現(xiàn)就介紹完了,示例地址:https://github.com/liubo-tech/spring-cloud-eureka尖阔。