1. 程式人生 > 其它 >SpringCloud中整合Eureka實現服務註冊(單機Eureka構建)

SpringCloud中整合Eureka實現服務註冊(單機Eureka構建)

場景

SpringCloud分散式微服務專案搭建構造父子模組依賴與實現服務提供者與消費者示例:

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/124618737

SpringCloud分散式微服務專案Common通用依賴模組抽離:

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/124631635

在上面搭建專案結構基礎上,怎樣實現與Eureka整合實現服務註冊。

什麼是服務治理

Spring Cloud封裝了Netflix公司開發的Eureka模組來實現服務治理。
在傳統的rpc遠端呼叫框架中,管理每個服務與服務之間依賴關係比較複雜,所以需要使用服務治理,
服務之間依賴關係,可以實現服務呼叫、負載均衡、容錯等,實現服務發現與註冊。

什麼是服務註冊與發現

Eureka採用了CS的設計架構,Eureka Server作為服務註冊功能的伺服器,它是服務註冊中心。而系統中的其他微服務,使用
Eureka的客戶端連線到Eureka Server並維持心跳連線。這樣系統維護人員就可以通過Eureka Server來監控系統中各個微服務
是否正常執行。

在服務註冊與發現中,有一個註冊中心。當伺服器啟動的時候,會把當前自己伺服器的資訊比如服務地址通訊地址等以別名方式
註冊到註冊中心上。另一方(消費者|服務提供者),以該別名的方式去註冊中心上獲取到實際的服務通訊地址,然後再實現本地
RPC呼叫。RPC遠端呼叫框架核心設計思想在於註冊中心。因為使用註冊中心管理每個服務與服務之間的一個依賴關係(服務治理概變)。
在任何rpc框架中,都會有一個註冊中心(存放服務地址相關資訊(介面地址))。

Eureka的兩個元件

Eureka Server 提供服務註冊服務
各個微服務節點通過配置啟動後,會在EurekaServer中進行註冊,這樣EurekaServer中的服務登錄檔中將會儲存所有可用服務
節點的資訊,服務節點的資訊可以在介面中直觀看到。

EurekaClient通過註冊中心進行訪問
是一個Java客戶端,用於簡化Eureka Server的互動,客戶端同時也具備一個內建的、使用輪詢(round-robin)負載演算法
的負載均衡器。在應用啟動後,將會向Eureka Server傳送心跳(預設週期為30秒)。如果Eureka Server在多個心跳週期內
沒有接收到某個節點的心跳,EurekaServe會從服務登錄檔中把這個服務節點移除(預設90秒)

注:

部落格:
https://blog.csdn.net/badao_liumang_qizhi
關注公眾號
霸道的程式猿
獲取程式設計相關電子書、教程推送與免費下載。

實現

1、新建Eureka Server提供服務註冊服務

參考上面新建子模組的流程,在父級專案下新建子模組

設定模組名為cloud-eureka-server7001

2、pom檔案中新增eureka-server的依賴

        <!--eureka-server-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

除了引入該依賴之外,其他依賴根據自己業務需要引入,完整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">
    <parent>
        <artifactId>SpringCloudDemo</artifactId>
        <groupId>com.badao</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-eureka-server7001</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <!--eureka-server-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
        <dependency><!-- 引入自己定義的api通用包,可以使用Payment支付Entity -->
            <groupId>com.badao</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>
</project>

3、新建application.yml進行eureka相關的配置

server:
  port: 7001


eureka:
  instance:
    hostname: eureka #eureka服務端的例項名稱
  client:
    register-with-eureka: false     #false表示不向註冊中心註冊自己。
    fetch-registry: false     #false表示自己端就是註冊中心,我的職責就是維護服務例項,並不需要去檢索服務
    service-url:
    #單機就是7001自己
      defaultZone: http://127.0.0.1:7001/eureka/

4、新建啟動類,並在啟動上新增@EnableEurekaServer註解

package com.badao.springclouddemo;


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class EurekaMain7001 {
    public static void main(String[] args){
        SpringApplication.run(EurekaMain7001.class,args);
    }
}

完整的Eureka服務註冊中心的結構如下

5、修改服務提供者服務實現Eureka Client

在服務提供者的服務的pom檔案中新增依賴

        <!--eureka-client-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

修改其配置檔案application.yml新增eureka client的配置

eureka:
  client:
    #表示是否將自己註冊進EurekaServer預設為true。
    register-with-eureka: true
    #是否從EurekaServer抓取已有的註冊資訊,預設為true。單節點無所謂,叢集必須設定為true才能配合ribbon使用負載均衡
    fetchRegistry: true
    service-url:
      #單機版
      defaultZone: http://localhost:7001/eureka

主啟動類PaymentMain8001上添加註解@EnableEurekaClient

package com.badao.springclouddemo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication
@EnableEurekaClient
public class PaymentMain8001
{
    public static void main(String[] args) {
        SpringApplication.run(PaymentMain8001.class, args);
    }
}

6、修改服務消費者,這裡是88服務實現Eureka Client

pom檔案中新增依賴

        <!--eureka-client-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

修改配置檔案application.yml,新增如下配置

eureka:
  client:
    #表示是否將自己註冊進EurekaServer預設為true。
    register-with-eureka: true
    #是否從EurekaServer抓取已有的註冊資訊,預設為true。單節點無所謂,叢集必須設定為true才能配合ribbon使用負載均衡
    fetchRegistry: true
    service-url:
      #單機
      defaultZone: http://localhost:7001/eureka

修改主啟動類添加註解@EnableEurekaClient

package com.badao.springclouddemo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication
@EnableEurekaClient
public class OrderMain88
{
    public static void main(String[] args) {
            SpringApplication.run(OrderMain88.class, args);
    }
}

7、啟動Eureka Server7001服務,再啟動服務提供者8001和服務消費者88服務

然後訪問

http://localhost:7001/

可以看到Eureka的Server端啟動成功,並且兩個服務也已經註冊成功