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

1、Eurake的簡介

今天咱們來介紹下springcloud的核心組件Eureka,Eurake是負責微服務架構中服務治理的功能,負責各個服務實例的註冊與發現。
Eureka包含了服務器端和客戶端組件。服務器端,也被稱做是服務註冊中心,用於提供服務的註冊與發現。 客戶端組件包含服務消費者與服務生產者。在應用程序運行時,服務生產者向註冊中心註冊本身的服務實例,當消費者須要調用這個服務時,會先從註冊中心去查找對應的生產者,而後就能夠實現對該服務的消費了。
這裏寫圖片描述
上圖是一個較爲簡單的服務註冊消費過程,也是Eureka組件的一個基本運轉流程。下面咱們來搭建一個Eureka實例。java

2、使用Eureka進行服務的註冊消費

一、建立一個服務註冊中心

首先,打開intellij idea,建立一個springboot項目的主Maven工程,名稱是eureka,勾選上須要用到的依賴,提醒一下,筆者這裏選擇的springboot版本是2.0.3,建議讀者們也選擇一樣的版本。
這裏寫圖片描述
點擊下一步後,填寫上項目名並點擊完成便可。
這裏寫圖片描述
這樣,主工程就建立成功了,建立完主工程後,咱們須要建立兩個子工程,一個是服務註冊中心eureka-server,另外一個做爲客戶端,咱們命名爲eureka-client.
下面,咱們先建立server的例子,右鍵主工程,選擇New -> model -> spring initialir 建立一個新module,
這裏寫圖片描述
點擊下一步,填完信息後跳轉到選擇依賴的界面,選擇Eureka Server依賴
這裏寫圖片描述
建立後的pom文件以下:git

<?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註解
這裏寫圖片描述
默認狀況下,Eureka server會本身向本身註冊,咱們須要在配置文件application.yml添加一些配置,代碼以下:github

#端口
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,結果以下圖:
這裏寫圖片描述
這是eureka註冊中心的界面圖,咱們能夠看到不少信息,好比「System Status」能夠看到咱們的環境以及系統時間等信息,以及「General Info」裏有不少關於註冊中心的常規信息,包括了cpu,可用空間等,這些知識點比較多,並且不影響咱們的項目效果,因此筆者今天不打算討論太多,看改天有空再寫一篇博文來爲你們專門介紹,咱們要關注的是「Instances currently registered with Eureka」 這一欄,欄中顯示 No instances available ,很明顯,由於咱們沒有註冊服務,也就沒有可用的服務,因此,咱們要再建立客戶端項目eureka-client.web

二、建立服務的提供者

eureka-client的建立過程同server相似,在選擇依賴時換成Eureka Discovery,建立後的pom文件以下:spring

<?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
這裏寫圖片描述
而後,在eureka-client的配置文件中加入如下配置:apache

# 設置服務名
spring:
  application:
    name: eureka-client
# 設置註冊中心地址
eureka:
  client:
    service-url:
      defaultZone: http://localhost:1111/eureka

首先,指明本身的服務名爲eureka-client,同時,指明註冊中心的地址,這樣,註冊中心才能找到這個服務。
這裏要說明一下,idea的配置文件是能夠自動提示的,可是寫註冊中心地址時只能提示到service-url,以後的defaultZone是須要讀者本身編寫的,有人會懷疑是否是我寫錯了,其實不是,咱們能夠按ctrl點擊defaultZone跳轉到它的bean類查看源碼。
這裏寫圖片描述
能夠看到,這裏的默認標識的確是」defaultZone」,因此配置文件這麼寫是沒有問題的,你們若是對配置的解析過程有興趣的話,能夠本身一步步跟着源碼查看。
配置完以後,啓動eureka-client項目,而後返回eureka-server的訪問界面,能夠看到咱們的服務註冊成功了!
這裏寫圖片描述
這樣,咱們的服務註冊就完成了,接下來咱們來測試一下服務消費的過程。瀏覽器

三、建立服務的消費者

接下來,咱們建立一個服務消費者的工程,命名爲eureka-consumer,建立過程同eureka-client同樣,建立成功後在main入口文件加入註解@EnableDiscoveryClient,而後修改一下配置文件application.yml:springboot

# 設置服務名
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請求。
這裏寫圖片描述
在這裏,咱們稍微介紹一下RestTemplate ,RestTemplate是用來訪問restful API的網絡框架,其主要方法與rest的http協議相關,例如GET 、POST 、PUT 、DELETE,這些方法對應這個類中的getForObject()、getForEntity()、postForObject()、put()和delete()等,本文裏咱們用getForObject()來請求API並返回對應的信息。
新建一個controller文件,添加一個接口(」/consumer」),用來消費eureka-client提供的接口 :restful

@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/,從下圖中能夠看到兩個服務都已經註冊成功
這裏寫圖片描述
接着,打開新頁面訪問http://localhost:1113/consumer,能夠看到瀏覽器成功輸出」hello」字符串。
這裏寫圖片描述
這代表,咱們成功經過eureka-consumer提供的接口來消費了eureka-client這個微服務了。

總結

本文給你們簡單介紹了服務註冊發現組件eureka的實例,同時也實現了服務之間的調用,雖然例子簡單,但也算開了個好頭,接下來的系列教程會繼續爲你們講解其餘組件的用法,歡迎讀者們能跟我一塊兒學習,如若文章有錯誤或不足之處,讀者們能夠在評論區指出,我會積極給於回覆!

源碼地址:https://github.com/Taoxj/SpringCloudDemo/tree/master/eureka

本文分享 CSDN - 鄙人薛某。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索