1. 程式人生 > >springcloud微服務系列之服務註冊與發現組件Eureka

springcloud微服務系列之服務註冊與發現組件Eureka

顯示 功能 depend mod 其他 瀏覽器 使用 空間 之間

一、Eurake的簡介
二、使用Eureka進行服務的註冊消費
1、創建一個服務註冊中心
2、創建服務的提供者
3、創建服務的消費者

總結

一、Eurake的簡介

今天我們來介紹下springcloud的核心組件Eureka,Eurake是負責微服務架構中服務治理的功能,負責各個服務實例的註冊與發現。

Eureka包含了服務器端和客戶端組件。服務器端,也被稱作是服務註冊中心,用於提供服務的註冊與發現。 客戶端組件包含服務消費者與服務生產者。在應用程序運行時,服務生產者向註冊中心註冊自己的服務實例,當消費者需要調用這個服務時,會先從註冊中心去查找對應的生產者,然後就可以實現對該服務的消費了。

springcloud微服務系列教程(二)服務註冊與發現組件Eureka

上圖是一個較為簡單的服務註冊消費過程,也是Eureka組件的一個基本運轉流程。下面我們來搭建一個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