SpringBoot3.1.5對應新版本SpringCloud開發(1)-Eureka註冊中心

高同学,你好發表於2024-05-03

服務的提供者和消費者

服務之間可以透過Spring提供的RestTemplate來進行http請求去請求另一個Springboot的專案,這就叫做服務間的遠端呼叫。
當一個服務透過遠端呼叫去呼叫另一個服務時,被呼叫的服務就叫做服務的提供者,呼叫服務的服務就叫做服務的消費者。
一個服務可以既是服務的提供者也是服務的消費者。

1、服務呼叫關係

  • 服務提供者:暴露介面給其它微服務呼叫
  • 服務消費者:呼叫其它微服務提供的介面
  • 提供者和消費者的角色其實是相對的

Eureka註冊中心

  • 遠端呼叫的問題

  • eureka原理

  • 搭建eurekaServer

  • 服務註冊

  • 服務發現

eureka的作用

  • 消費者該如何獲取服務提供者的具體資訊
    1. 服務提供者啟動時向eureka註冊自己的資訊
    2. eureka儲存這些資訊
    3. 消費者根據服務名稱向eureka拉取提供者資訊
  • 如果有多個服務提供者,消費者該如何選擇
    1. 服務消費者利用負載均衡演算法,從服務列表中挑選一個
  • 消費者如何感知服務提供者健康狀態
    1. 服務提供者會每隔30s向EurekaServer傳送心跳請求,報告健康狀態
    2. eureka會更新記錄服務列表資訊,心跳不正常會被剔除
    3. 消費者就可以拉取到最新的資訊

在eureka架構中,微服務角色有兩類:

  • EurekaServer:服務端、註冊中心
    1. 記錄服務資訊
    2. 心跳監控
  • EurekaClient:客戶端
    1. provider:服務提供者
      1. 註冊自己的資訊到EurekaServer中
      2. 每隔30S向EurekaServer傳送心跳
    2. consumer:服務消費者
      1. 根據服務名稱從EurekaServer拉取服務列表
      2. 基於服務列表做負載均衡,選中一個微服務後發起遠端呼叫

EurekaServer服務註冊

  • 建立eureka服務端

父工程引入對應版本的springcloud依賴

springboot 3.1.5對應

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-dependencies</artifactId>
    <version>2022.0.4</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

引入eureka服務端依賴

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

啟動eureka服務,在啟動類上新增@EnableEurekaServer註解

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }

}

配置檔案中配置服務名稱-地址-服務埠

spring:
  application:
    name: eureka-server #微服務名稱
server:
  port: 10086 #服務埠
eureka:
  client:
    service-url: #eureka地址資訊 eureka自己也是一個微服務,也會被註冊到eureka中 為了做eureka叢集
      defaultZone: http://127.0.0.1:10086/eureka

eureka服務端自己也會被註冊到eureka服務中

然後就可以訪問http://127.0.0.1:10086進入eureka註冊中心了

  • 服務註冊

確保父工程成功引入cloud依賴後引入eureka服務端依賴

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

</dependency>

在配置檔案中配置eureka服務名稱和地址即可

server:
  port: 8081
spring:
  application:
    name: cloud-user
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka
  • 服務發現

引入依賴

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

</dependency>

配置地址

eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka

給RestTemplate新增上@LoadBalanced註解,實現同一服務多個地址的負載均衡呼叫

//RestTemplate spring提供的遠端呼叫模組 允許傳送http請求
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
    return new RestTemplate();
}

使用RestTemplate不透過具體的ip地址而是透過服務名稱遠端呼叫實現查詢

@Autowired
RestTemplate restTemplate;
@GetMapping("/order/all/{id}")
public ordersUser getAllById(@PathVariable("id") Integer id){
    String str1 = "http://cloud-order/order/"+id;
    orders od = restTemplate.getForObject(str1, orders.class);
    String str = "http://cloud-user/user/"+od.getOrderuserid();
    user forObject = restTemplate.getForObject(str, user.class);
    ordersUser ordersUser = new ordersUser();

    ordersUser.setOrderid(od.getOrderid());
    ordersUser.setUser(forObject);
    ordersUser.setOrdername(od.getOrdername());
    ordersUser.setOrderaddress(od.getOrderaddress());
    ordersUser.setOrderprice(od.getOrderprice());
    ordersUser.setOrdernumber(od.getOrdernumber());

    return ordersUser;
}

相關文章