Spring cloud eureka是用來實作服務的注冊和發現;既包含了服務端元件也包含了用戶端元件。
Eureka的服務端也成為服務注冊中心,支援高可用配置,Eureka用戶端主要處理服務的注冊與發現,Eureka的用戶端向注冊中心注冊自身提供的服務并周期性的發送心跳來更新它的服務,也能從服務端查詢目前注冊的服務資訊并把它們緩存到本地并周期性地重新整理服務狀态。
本篇文章主要分為以下幾個方面:
1、注冊中心搭建
2、服務注冊
3、高可用注冊中心
4、消費服務
一、注冊中心搭建:
使用IDEA建立一個springboot項目,勾選eureka server:
在主類中添加注解@EnableEurekaServer,啟動一個服務注冊中心,供其他應用進行對話
@EnableEurekaServer
@SpringBootApplication
public class Eurekaserver1Application {
public static void main(String[] args) {
SpringApplication.run(Eurekaserver1Application.class, args);
}
}
在配置檔案添加:
server.port=8088
eureka.instance.hostname=localhost
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.service-url..defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
預設情況下服務注冊中心會将自己作為用戶端來嘗試注冊他自己。
eureka.client.register-with-eureka:false:不向注冊中心注冊自己
eureka.client.fetch-registry:false:由于注冊中心的職責是維護執行個體,并不需要去檢索服務,是以設定成false。
二、注冊服務提供者:
新建立一個springboot項目,勾選Eureka Discovery:
建立一個controller:
@RequestMapping(value = "/")
@RestController
public class HelloController {
@RequestMapping(value = "hello")
public String hello(){
return "hello world";
}
}
在application上添加注解:@EnableDiscoveryCilent
@EnableDiscoveryClient
@SpringBootApplication
public class Helloserver1Application {
public static void main(String[] args) {
SpringApplication.run(Helloserver1Application.class, args);
}
}
配置檔案:
server.port=8090
spring.application.name=helloservice-1
eureka.client.service-url.defaultZone=http://localhost:8088/eureka
指定了服務注冊中心
然後啟動項目,通路注冊中心,就會看到服務以及注冊到注冊中心了。
三、高可用服務注冊中心
在微服務架構的分布式環境下,我們必須要考慮發生故障的情況,是以在生成環境中必須對各個元件進行高可用部署,接下來我們進行注冊中心的高可用,建構一個雙節點的服務注冊中心;
改造之前的服務注冊中心,修改配置檔案内容:
server.port=8088
spring.application.name=server-1
eureka.instance.hostname=server-1
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.service-url..defaultZone=http://server-2:8089/eureka/
在建立一個springboot項目 作為eureka server,配置檔案如下:
server.port=8089
eureka.instance.hostname=server-2
spring.application.name=server-2
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone=http://server-1:8088/eureka/
通路注冊中心2:
通路注冊中心1:
高可用搭建完成。
四、消費服務(Ribbon)
建立一個springboot項目,勾選 Eureka Discovery和 Ribbon
在主類中添加注解、引入RestTempate
@EnableDiscoveryClient
@SpringBootApplication
public class RibbonApplication {
@Bean
@LoadBalanced
RestTemplate restTemplate(){
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(RibbonApplication.class, args);
}
}
配置檔案:
server.port=8091
spring.application.name=ribbon-consumer
eureka.client.service-url.defaultZone=http://server-2:8089/eureka/
eureka.client.service-url.defaultZone 指定 注冊1、2都可以。
啟動項目,再檢視注冊中心:
多了一個RIBBON-CONSUER服務,說明已經成功注冊到注冊中心;現在開始消費服務HELLOSERVICE-1
建立一個controller:
@RestController
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
@RequestMapping(value = "/consumer")
public String getvalue(){
return restTemplate.getForEntity("http://HELLOSERVICE-1/hello",String.class).getBody();
}
}
啟動項目,通路localhost:8091/consumer,
消費服務成功,Ribbon是用戶端負載均衡,我們為了驗證,再建立一個HELLOSERVICE,和上面的HELOSERVICE隻是端口不一樣。
server.port=8093
spring.application.name=helloservice-1
eureka.client.service-url.defaultZone=http://localhost:8088/eureka
隻是端口号從8090變成了8093
啟動項目,檢視注冊中心:
HELLOSERVICE-1 啟動了兩個執行個體,隻是端口不一樣,現在我們再通過consumer來消費服務,多通路幾次,可以看到,兩個不同端口的服務交替響應:
實作了用戶端的負載均衡。
關于服務治理和Ribbon的其他内容我們後續再詳細講解。。。。。