【SpringCloud Greenwich版本】第二章:服務提供者(eureka)
一、SpringCloud版本
本文介紹的Springboot版本為2.1.1.RELEASE,SpringCloud版本為Greenwich.RC1,JDK版本為1.8,整合環境為IntelliJ IDEA
二、Eureka客戶端介紹
服務發現是基於微服務架構的關鍵原則之一。嘗試配置每個客戶端或某種形式的約定可能非常困難,可以非常脆弱。Netflix服務發現伺服器和客戶端是Eureka。可以將伺服器配置和部署為高可用性,每個伺服器將註冊服務的狀態複製到其他伺服器。
當客戶端註冊Eureka時,它提供關於自身的元資料,例如主機和埠,健康指示符URL,主頁等。Eureka從屬於服務的每個例項接收心跳訊息。如果心跳失敗超過可配置的時間表,則通常將該例項從登錄檔中刪除。
三、建立客戶端(服務提供者)
- 3.1建立
參考前一章,建立Springboot module工程,取名為cloudclient,pom檔案繼承cloudser的pom檔案
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" >
<modelVersion>4.0.0</modelVersion>
<groupId>com.jthao</groupId>
<artifactId>cloudclient</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>cloudclient</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>com.jthao</groupId>
<artifactId>cloudser</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
</project>
- 3.2啟動
啟動Eureka客戶端需在啟動類上增加@EnableDiscoveryClient註解
package com.jthao.cloudclient;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@EnableDiscoveryClient
@SpringBootApplication
public class CloudclientApplication {
public static void main(String[] args) {
SpringApplication.run(CloudclientApplication.class, args);
}
}
當然,僅僅是@EnableDiscoveryClient是不夠的,還需在配置檔案中註明訪問的服務端地址service-url
注:
- 其中spring.application.name為各服務之間訪問呼叫時使用。
eureka.client.healthcheck.enabled=true
為開啟健康檢查
預設情況下,Eureka使用客戶端心跳來確定客戶端是否啟動。除非另有規定,否則發現客戶端將不會根據Spring Boot執行器傳播應用程式的當前執行狀況檢查狀態。這意味著成功註冊後Eureka將永遠宣佈申請處於“UP”狀態。通過啟用Eureka執行狀況檢查可以改變此行為,從而將應用程式狀態傳播到Eureka。因此,每個其他應用程式將不會在“UP”之外的狀態下將流量傳送到應用程式
server.port=8002
spring.application.name=cloudclient
eureka.client.service-url.defaultZone: http://localhost:8001/eureka/
eureka.client.healthcheck.enabled=true
我們在配置一個Controller
package com.jthao.cloudclient.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
@RequestMapping("/test")
public String hello(@RequestParam String name) {
System.out.println("cloudclient start");
return name + "===埠:8002被呼叫了===";
}
}
啟動完成後,會發現客戶端已經在服務註冊中心註冊了。服務名為cloudclient,埠為8002
通過瀏覽器訪問http://localhost:8002/test?name=xiaoming
至此,服務註冊中心(eureka server)與服務提供者(eureka client)已全部完成。
四、啟動多個客戶端
在此介紹下如何啟動多個客戶端,為後續初步實現負載做準備。
選中專案,如下圖所示,點選編輯配置
將紅框中預設勾選去掉
修改配置檔案中埠為8003,Controller中的輸出資訊稍加修改,再次啟動cloudclient工程,原來的工程不用停
server.port=8003
spring.application.name=cloudclient
eureka.client.service-url.defaultZone: http://localhost:8001/eureka/
package com.jthao.cloudclient.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
@RequestMapping("/test")
public String hello(@RequestParam String name) {
System.out.println("cloudclient start");
return name + "===埠:8003被呼叫了===";
}
}
會發現註冊中心多了一個服務,埠為8003
訪問頁面,輸出資訊