Eureka是Netflix開源的一款提供服務註冊和發現的產品,它提供了完整的Service Registry和Service Discovery實現。也是springcloud體系中最重要最核心的組件之一。spring
上圖簡要描述了Eureka的基本架構,由3個角色組成:springboot
提供服務註冊和發現bash
服務提供方 將自身服務註冊到Eureka,從而使服務消費方可以找到架構
服務消費方 從Eureka獲取註冊服務列表,從而可以消費服務app
項目實踐ide
新建三個springboot項目 測試
建立成功以後,修改一下配置文件,刪除以前的application.properties 文件,使用application.ymlfetch
註冊中心:ui
spring:
application:
name: spring-cloud-eureka-server
server:
port: 8910
eureka:
# instance:
# hostname: peer1
client:
#registerWithEureka 和 fetchRegistry 設置爲false,代表本身屬於服務中心主體
registerWithEureka: false #是否將本身註冊到eureka server,構建集羣環境時,需將本身註冊到集羣中,默認爲true
fetchRegistry: false #是否從eureka server獲取註冊信息,構建集羣環境時,需同步其餘eureka server節點,默認爲true
serviceUrl:
defaultZone: http://127.0.0.1:${server.port}/eureka/
複製代碼
啓動類加上註解:spa
@EnableEurekaServer
複製代碼
生產者:
spring:
application:
name: spring-cloud-eureka-pro
server:
port: 8911
eureka:
# instance:
# hostname: peer2
client:
#registerWithEureka 和 fetchRegistry 設置爲false,代表本身屬於服務中心主體
registerWithEureka: true #是否將本身註冊到eureka server,構建集羣環境時,需將本身註冊到集羣中,默認爲true
fetchRegistry: true #是否從eureka server獲取註冊信息,構建集羣環境時,需同步其餘eureka server節點,默認爲true
serviceUrl:
defaultZone: http://127.0.0.1:8910/eureka/
複製代碼
啓動類加上註解:
@EnableEurekaClient
複製代碼
測試接口:
@RestController
public class TestController {
@Value("${server.port}")
String port;
@RequestMapping("/hi")
public String home(@RequestParam String name)
{
return "hi " + name + ",i am from port:" + port;
}
}
複製代碼
消費者:
spring:
application:
name: spring-cloud-eureka-cus
server:
port: 8912
eureka:
# instance:
# hostname: peer3
client:
#registerWithEureka 和 fetchRegistry 設置爲false,代表本身屬於服務中心主體
registerWithEureka: true #是否將本身註冊到eureka server,構建集羣環境時,需將本身註冊到集羣中,默認爲true
fetchRegistry: true #是否從eureka server獲取註冊信息,構建集羣環境時,需同步其餘eureka server節點,默認爲true
serviceUrl:
defaultZone: http://127.0.0.1:8910/eureka/
複製代碼
啓動類加上註解:
@EnableDiscoveryClient
複製代碼
service:
@Service
public class TestService {
@Autowired
RestTemplate restTemplate;
public String hiService(String name)
{
return restTemplate.getForObject("http://spring-cloud-eureka-pro/hi?name=" + name, String.class);
}
}
複製代碼
controller:
@RestController
public class TestController {
@Autowired
TestService testService;
@RequestMapping(value = "/hi")
public String hi(@RequestParam String name) {
return testService.hiService(name);
}
}
複製代碼
啓動三個項目,訪問http://127.0.0.1:8910/,查看註冊的實例
直接訪問生產者的測試方法
訪問消費者
經過端口能夠看到消費者訪問的是生產的接口