springcloud微服務系列之服務註冊與發現組件Eureka
二、使用Eureka進行服務的註冊消費
1、創建一個服務註冊中心
2、創建服務的提供者
3、創建服務的消費者
總結
一、Eurake的簡介
今天我們來介紹下springcloud的核心組件Eureka,Eurake是負責微服務架構中服務治理的功能,負責各個服務實例的註冊與發現。
Eureka包含了服務器端和客戶端組件。服務器端,也被稱作是服務註冊中心,用於提供服務的註冊與發現。 客戶端組件包含服務消費者與服務生產者。在應用程序運行時,服務生產者向註冊中心註冊自己的服務實例,當消費者需要調用這個服務時,會先從註冊中心去查找對應的生產者,然後就可以實現對該服務的消費了。
springcloud微服務系列教程(二)服務註冊與發現組件Eureka
二、使用Eureka進行服務的註冊消費
1、創建一個服務註冊中心
首先,打開intellij idea,創建一個springboot項目的主Maven工程,名稱是eureka,勾選上需要用到的依賴,提醒一下,筆者這裏選擇的springboot版本是2.0.3,建議讀者們也選擇同樣的版本。
springcloud微服務系列教程(二)服務註冊與發現組件Eureka
點擊下一步後,填寫上項目名並點擊完成即可。
springcloud微服務系列教程(二)服務註冊與發現組件Eureka
這樣,主工程就創建成功了,創建完主工程後,我們需要創建兩個子工程,一個是服務註冊中心eureka-server,另一個作為客戶端,我們命名為eureka-client.
下面,我們先創建server的例子,右鍵主工程,選擇New -> model -> spring initialir 創建一個新module,
springcloud微服務系列教程(二)服務註冊與發現組件Eureka
點擊下一步,填完信息後跳轉到選擇依賴的界面,選擇Eureka Server依賴
springcloud微服務系列教程(二)服務註冊與發現組件Eureka
創建後的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.yeya</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>eureka</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
要想開啟服務註冊中心,我們需要在springboot項目中的main入口文件添加@EnableEurekaServer註解
springcloud微服務系列教程(二)服務註冊與發現組件Eureka
默認情況下,Eureka server會自己向自己註冊,我們需要在配置文件application.yml添加一些配置,代碼如下:
#端口
server:
port: 8761
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
設置服務的端口為1111,同時,通過設置eureka.client.register-with-eureka和eureka.client.fetch-registry都為false即可關閉服務向自己註冊。
完成這一切後,我們右鍵main方法啟動項目,然後再瀏覽器中訪問地址
http://localhost:1111,結果如下圖:
springcloud微服務系列教程(二)服務註冊與發現組件Eureka
這是eureka註冊中心的界面圖,我們可以看到很多信息,比如“System Status”可以看到我們的環境以及系統時間等信息,以及“General Info”裏有很多關於註冊中心的常規信息,包括了cpu,可用空間等,這些知識點比較多,而且不影響我們的項目效果,所以筆者今天不打算討論太多,看改天有空再寫一篇博文來為大家專門介紹,我們要關註的是“Instances currently registered with Eureka” 這一欄,欄中顯示 No instances available ,很明顯,因為我們沒有註冊服務,也就沒有可用的服務,所以,我們要再創建客戶端項目eureka-client.
2、創建服務的提供者
eureka-client的創建過程同server類似,在選擇依賴時換成Eureka Discovery,創建後的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.yeya</groupId>
<artifactId>eureka</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>eureka</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
同樣,我們需要在main加上註解@EnableDiscoveryClient
springcloud微服務系列教程(二)服務註冊與發現組件Eureka
然後,在eureka-client的配置文件中加入以下配置:
設置服務名
spring:
application:
name: eureka-client
設置註冊中心地址
eureka:
client:
service-url:
defaultZone: http://localhost:1111/eureka
首先,指明自己的服務名為eureka-client,同時,指明註冊中心的地址,這樣,註冊中心才能找到這個服務。
這裏要說明一下,idea的配置文件是可以自動提示的,但是寫註冊中心地址時只能提示到service-url,之後的defaultZone是需要讀者自己編寫的,有人會懷疑是不是我寫錯了,其實不是,我們可以按ctrl點擊defaultZone跳轉到它的bean類查看源碼。
springcloud微服務系列教程(二)服務註冊與發現組件Eureka
可以看到,這裏的默認標識的確是”defaultZone”,所以配置文件這麽寫是沒有問題的,大家如果對配置的解析過程有興趣的話,可以自己一步步跟著源碼查看。
配置完之後,啟動eureka-client項目,然後返回eureka-server的訪問界面,可以看到我們的服務註冊成功了!
springcloud微服務系列教程(二)服務註冊與發現組件Eureka
這樣,我們的服務註冊就完成了,接下來我們來測試一下服務消費的過程。
3、創建服務的消費者
接下來,我們創建一個服務消費者的工程,命名為eureka-consumer,創建過程同eureka-client一樣,創建成功後在main入口文件加入註解@EnableDiscoveryClient,然後修改一下配置文件application.yml:
設置服務名
spring:
application:
name: eureka-consumer
設置註冊中心地址
eureka:
client:
service-url:
defaultZone: http://localhost:1111/eureka
server:
port: 1113
為了能測試服務消費的效果,我們先在eureka-client中的主類中創建一個接口dc,
@EnableDiscoveryClient
@SpringBootApplication
@RestController
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
@GetMapping("/hello")
public String dc() {
return "hello";
}
}
在eureka-consumer的應用主類中,初始化 RestTemplate ,用來真正發起REST請求。
springcloud微服務系列教程(二)服務註冊與發現組件Eureka
在這裏,我們稍微介紹一下RestTemplate ,RestTemplate是用來訪問restful API的網絡框架,其主要方法與rest的http協議相關,例如GET 、POST 、PUT 、DELETE,這些方法對應這個類中的getForObject()、getForEntity()、postForObject()、put()和delete()等,本文裏我們用getForObject()來請求API並返回對應的信息。
新建一個controller文件,添加一個接口(”/consumer”),用來消費eureka-client提供的接口 :
@RestController
public class ConsumeController {
@Autowired
private LoadBalancerClient client;
@Autowired
RestTemplate restTemplate;
@GetMapping("/consumer")
public String consumer() {
ServiceInstance serviceInstance = client.choose("eureka-client");
String url = "http://" + serviceInstance.getHost() + ":" + serviceInstance.getPort() + "/hello";
String dc = restTemplate.getForObject(url,String.class);
return dc;
}
}
先通過 @Autowired 註入 LoadBalancerClient 一個實例client,client.choose()的參數是需要調用到的服務的名稱,傳入之後即可創建一個服務實例,通過實例的方法調用就可以訪問到eureka-client的”hello”接口並返回字符串信息。分別啟動eureka-server、eureke-client、eureka-consumer三個工程,在瀏覽器訪問http://localhost:1111/,從下圖中可以看到兩個服務都已經註冊成功
springcloud微服務系列教程(二)服務註冊與發現組件Eureka
接著,打開新頁面訪問http://localhost:1113/consumer,可以看到瀏覽器成功輸出”hello”字符串。
springcloud微服務系列教程(二)服務註冊與發現組件Eureka
這表明,我們成功通過eureka-consumer提供的接口來消費了eureka-client這個微服務了。
總結
本文給大家簡單介紹了服務註冊發現組件eureka的實例,同時也實現了服務之間的調用,雖然例子簡單,但也算開了個好頭,接下來的系列教程會繼續為大家講解其他組件的用法,歡迎讀者們能跟我一起學習,如若文章有錯誤或不足之處,讀者們可以在評論區指出,我會積極給於回復!
springcloud微服務系列之服務註冊與發現組件Eureka