1. 程式人生 > 其它 >學習spring cloud記錄4-Eureka

學習spring cloud記錄4-Eureka

前言

Eureka是一個註冊中心,在以前的記錄中,兩個服務之間的呼叫需要使用硬編碼的方式,即把ip和埠號等地址寫死在程式中,使用Eureka可解決此問題,但不知能解決這個問題,還有其他的作用。

Eureka的作用

1.消費者該如何獲取服務提供者的資訊?

服務提供者啟動時,向Eureka註冊自己的資訊

eureka儲存這些資訊

消費者根據服務名稱向eureka拉取提供者資訊

2.如果有多個服務提供者,消費者該如何選擇?

服務消費者利用負載均衡演算法,從服務列表中選擇一個

3.消費者如何感知伺服器供著健康狀態?

服務提供者會每隔30s向Eureka註冊中心傳送心跳請求,報告健康狀態

eureka會更新記錄伺服器列表資訊,心跳不正常的進行剔除

消費者就可以拉取到最新的資訊

搭建Eureka服務

建立專案

 

 

 

 

 

 引入依賴

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

編寫main函式

package ptiv.sinoam.eureka;

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

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

編寫配置檔案(application.yml)

server:
  port: 9003

spring:
  application:
    name: eureka-server

eureka:
  client:
    service-url:  # eureka徐婭註冊自己的資訊
      defaultZone: http://127.0.0.1:9003/eureka

啟動eureka

發現報錯Failed to configure a DataSource: ‘url’ attribute is not specified and no embedded datasource could be configured.

這是因為該專案在父級pom中引入了jdbc,springboot啟動時會自動裝配,這個時候發現沒有配置資料庫所以會報錯,在main方法中新增以下程式碼即可:

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

即可啟動成功,開啟頁面可以看到

 

 

 服務註冊

將demo-user註冊到eureka

引入依賴

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

編寫配置檔案

新增以下程式碼即可

eureka:
  client:
    service-url:  # eureka徐婭註冊自己的資訊
      defaultZone: http://127.0.0.1:9003/eureka

使用同樣方式將demo-order註冊到eureka中,啟動後會看到註冊的服務列表

 

 

 如果同一個服務啟動多個會怎樣

複製一個user服務,然後通過-Dserver.port=9004修改埠

 

 

 

啟動後發現user多了服務

 

 

 Eureka服務發現

在消費者中修改寫死的url,用服務名代替ip和port

        //呼叫demo-user裡面的請求
//        String url = "http://localhost:9001/demouser/user/test";
        //用服務名進行替換
        String url = "http://demo-user/demouser/user/test";

然後新增負載均衡

找到restTemplate添加註解

    /**
     * 建立RestTemplate並注入Spring容器
     * @return
     */
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

重啟order專案,呼叫介面後

 

 

 不斷重新整理後,可以在兩個user專案的日誌中發現都有走,說明實現了負載均衡

 

 

 

 

 

 結束

1.搭建Eureka

引入server依賴

新增@EnableEurekaServer註解

在配置檔案中配置eureka地址

2.服務註冊

引入client註解

在配置檔案中配置eureka地址

3.服務發現

引入client註解

在配置檔案中配置eureka地址

在restTemplate新增@LoadBalanced實現負載均衡