Spring Cloud Eureka 是 Spring Cloud Netflix 微服務套件中的一部分, 它基於 NetflixEureka 做了二次封裝, 主要負責完成微服務架構中的服務治理功能。 Spring Cloud 通過爲Eureka 增加了 Spring Boot 風格的自動化配置,我們只需通過簡單引入依賴和註解配置就能讓 Spring Boot 構建的微服務應用輕鬆地與 Eureka 服務治理體系進行整合。
瞭解springcloud架構可以加求求:三五三六二四七二五九
Eureka包含
Eureka服務端: 服務註冊中心
Eureka客戶端: 處理服務的註冊和發現
基礎架構
服務註冊中心: Eureka提供的服務端,提供服務註冊與發現功能。
服務提供者: 提供服務的應用,將自己提供的服務註冊到Eureka,以供其他應用發現。
服務消費者: 消費者應用從服務註冊中心獲取服務列表,從而使消費者可以知道去何處調用所需要的服務。
入門代碼
Eureka服務端編寫
1、新建一個Spring Boot項目,名爲eureka-server,引入依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
2、配置文件
spring:
application:
name: eureka
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka
register-with-eureka: false # 不向註冊中心註冊自己
fetch-registry: false # 不檢索服務
server:
port: 8761
3、在啓動類上添加註解 @EnableEurekaServer
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
ok,啓動eureka-server
打開瀏覽器訪問 http://localhost:8761/
可以看到Eureka服務端已經完成了。就這麼簡單
Eureka客戶端編寫
1、新建一個Spring Boot項目,名爲eureka-client,引入依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
記住一定要引入spring-boot-starter-web依賴,,不然項目啓動不起來自動停止。
2、配置文件
spring:
application:
name: eureka-client
server:
port: 8080
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
3、啓動類配置註解 @EnableDiscoveryClient
@SpringBootApplication
@EnableDiscoveryClient
public class EurekaClientApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaClientApplication.class, args);
}
}
啓動eureka-client客戶端,刷新eureka服務端頁面,已經顯出註冊的客戶端了
ok,客戶端也編寫完成了。
到此就結束了,
但真的就結束了嗎???
有人要問了,Spring Cloud Eureka服務端和客戶端都寫好了,但是怎麼使用呢?
下面就講各服務間怎麼調用。
新建個controller層
@RestController
public class HelloController {
@RequestMapping(value = "/hello")
public String index() {
System.out.println("請求到了");
return "hello";
}
}
通過訪問 http://localhost:8080/hello 可以看到正常返回數據
新建一個Spring Boot項目,名爲eureka-consumer 配置和eureka-client類似,端口改一下,這裏改爲8085,啓動項目
再看一下eureka服務端的管理平臺,eureka-consumer已經註冊了。
微服務間調用這裏講兩種方式,一種是通過RestTemplate,一種是使用Spring Cloud Feign
在這之前要說一下Spring Cloud Ribbon
Ribbon是一個基於HTTP和TCP的客戶端負載均衡
如果微服務佈置多臺,就需要Ribbon進行負載均衡了。
eureka-client改下端口再啓動一個, 可以看到這裏已經有兩個實例了。
引入Ribbon依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
RestTemplate 方式
RestTemplate實現了對HTTP請求的封裝處理
在啓動類上加入創建RestTemplate bean
@Bean
@LoadBalanced // 負載均衡註解
public RestTemplate restTemplate() {
return new RestTemplate();
}
創建ConsumerController,
@RestController
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
@RequestMapping(value = "/eureka-consumer")
public String helloConsumer() {
String result = restTemplate.getForEntity("http://eureka-client/hello", String.class).getBody();
return result;
}
}
訪問 http://localhost:8085/eureka-consumer 正常數據返回
Ribbon既然是負載均衡工具,那當然也要測試一下了。eureka-client改下端口在起一臺,然後訪問接口多次,通過打印日誌可以看出兩臺eureka-client都有被訪問,而且是以線性輪詢的方式被訪問,Ribbon默認是線性輪詢方式負載均衡。
Spring Cloud Feign 方式
Spring Cloud Feign是對RestTemplate進一步封裝,由它來幫助我們定義和實現依賴服務接口的定義。在Spring Cloud Feign的實現下,我們只需創建一個接口並用註解的方式來配置它。
快速入門
1、添加依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2、啓動類添加註解 @EnableFeignClients
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class RibbonConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(RibbonConsumerApplication.class, args);
}
}
3、定義接口ServiceClient 並添加註解@FeignClient(“eureka-client”) 參數爲在Eureka註冊的名稱
@FeignClient("eureka-client")
public interface ServiceClient {
@RequestMapping(value = "/hello")
String index();
}
4、在controller中注入ServiceClient 然後調用方法即可
@RestController
public class ConsumerController {
@Autowired
private ServiceClient serviceClient;
@RequestMapping(value = "/eureka-consumer2")
public String helloConsumer2() {
String result = serviceClient.index();
return result;
}
}
訪問 http://localhost:8085/eureka-consumer2 也能正常返回數據
Eureka的高可用,通過互相註冊的方式實現。這裏啓動三臺Eureka服務端信息如下
eureka-server1 8761
eureka-server2 8762
eureka-server3 8763
配置信息入下
// eureka-server1的配置信息
spring:
application:
name: eureka-server1
eureka:
client:
service-url:
defaultZone: http://localhost:8762/eureka,http://localhost:8763/eureka
register-with-eureka: false
fetch-registry: false # 不檢索服務
server:
port: 8761
// eureka-server2的配置信息
spring:
application:
name: eureka-server2
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka,http://localhost:8763/eureka
register-with-eureka: false
fetch-registry: false # 不檢索服務
server:
port: 8762
// eureka-server3的配置信息
spring:
application:
name: eureka-server3
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka,http://localhost:8762/eureka
register-with-eureka: false
fetch-registry: false # 不檢索服務
server:
port: 8763
eureka-client保持配置不變,依然註冊在http://localhost:8761/eureka/ 上
瀏覽器分別訪問 http://localhost:8761/ http://localhost:8762/ http://localhost:8763/,查看到這三臺裏的服務註冊信息都有eureka-client, 那是因爲這三臺Eureka服務端之間互相註冊,所以都有eureka-client的註冊信息。
Eureka服務端配置了高可用,下面就是客戶端配置了。
修改eureka-client的配置文件
spring:
application:
name: eureka-client
server:
port: 8081
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/,http://localhost:8763/eureka/
這樣就可以註冊三臺Eureka服務端了。
到這裏是Spring Cloud Eureka入門和高可用講完了。