使用Spring Boot整合Consul

省赚客开发者团队發表於2024-07-13

使用Spring Boot整合Consul

大家好,我是微賺淘客系統3.0的小編,是個冬天不穿秋褲,天冷也要風度的程式猿!

在微服務架構中,服務發現和配置管理是兩個非常重要的元件。HashiCorp Consul 是一個支援多資料中心的服務發現和配置工具,它提供了服務註冊和發現、健康檢查、Key/Value 儲存等功能。Spring Boot 提供了對 Consul 的良好支援,可以輕鬆整合 Consul 以實現服務註冊和配置管理。本文將詳細介紹如何使用 Spring Boot 整合 Consul。

一、環境準備

在開始之前,我們需要確保以下環境已經搭建好:

  1. JDK 8 或以上版本
  2. Maven 3 或以上版本
  3. Consul 伺服器

二、建立 Spring Boot 專案

首先,我們使用 Spring Initializr 建立一個新的 Spring Boot 專案,並新增必要的依賴。

  1. 開啟 Spring Initializr
  2. 輸入專案資訊:
    • Group: cn.juwatech
    • Artifact: spring-boot-consul
  3. 新增依賴:
    • Spring Boot DevTools
    • Spring Web
    • Spring Boot Actuator
    • Spring Cloud Starter Consul Discovery
    • Spring Cloud Starter Consul Config

點選“Generate”按鈕生成專案並下載,然後解壓專案檔案。

三、配置 Consul

在進行 Spring Boot 與 Consul 的整合之前,需要確保 Consul 伺服器已經啟動。可以透過以下命令啟動本地 Consul 伺服器:

consul agent -dev

此命令將在開發模式下啟動 Consul 伺服器。

四、配置 Spring Boot 應用

接下來,我們需要配置 Spring Boot 應用以使用 Consul 進行服務註冊和配置管理。

  1. 開啟 src/main/resources/application.properties 檔案,新增以下配置:
spring.application.name=spring-boot-consul
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
spring.cloud.consul.discovery.enabled=true
spring.cloud.consul.config.enabled=true
management.endpoints.web.exposure.include=*
  1. src/main/java/cn/juwatech/springbootconsul 目錄下建立一個新的主類 SpringBootConsulApplication.java
package cn.juwatech.springbootconsul;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

五、建立服務提供者和消費者

接下來,我們建立一個簡單的服務提供者和消費者,以演示服務註冊和發現。

  1. 建立服務提供者

src/main/java/cn/juwatech/springbootconsul 目錄下建立一個新的控制器 ProviderController.java

package cn.juwatech.springbootconsul;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ProviderController {

    @GetMapping("/provider")
    public String provideService() {
        return "Service provided by Provider";
    }
}
  1. 建立服務消費者

src/main/java/cn/juwatech/springbootconsul 目錄下建立一個新的控制器 ConsumerController.java

package cn.juwatech.springbootconsul;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class ConsumerController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/consume")
    public String consumeService() {
        return restTemplate.getForObject("http://spring-boot-consul/provider", String.class);
    }
}
  1. 配置 RestTemplate Bean

SpringBootConsulApplication 類中新增一個 RestTemplate Bean:

package cn.juwatech.springbootconsul;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class AppConfig {

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

六、執行並驗證

啟動 Spring Boot 應用程式,並驗證服務註冊和發現功能。

  1. 執行 SpringBootConsulApplication 類,啟動 Spring Boot 應用程式。
  2. 開啟瀏覽器,訪問 http://localhost:8500,進入 Consul UI 介面,可以看到 spring-boot-consul 服務已經註冊。
  3. 訪問 http://localhost:8080/consume,驗證服務消費者是否能夠成功呼叫服務提供者的介面。

七、使用 Consul 配置中心

Consul 還提供了配置中心功能,可以將配置儲存在 Consul 的 Key/Value 儲存中。

  1. 在 Consul UI 介面中,新增一個新的 Key config/spring-boot-consul/data,值為以下內容:
message: "Hello from Consul Config"
  1. 修改 ProviderController 類,新增一個新的端點以讀取配置:
package cn.juwatech.springbootconsul;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ProviderController {

    @Value("${message:Default Hello}")
    private String message;

    @GetMapping("/provider")
    public String provideService() {
        return "Service provided by Provider";
    }

    @GetMapping("/message")
    public String getMessage() {
        return message;
    }
}
  1. 重新啟動 Spring Boot 應用程式,訪問 http://localhost:8080/message,可以看到從 Consul 配置中心讀取的配置資訊。

透過以上步驟,我們成功地將 Spring Boot 應用與 Consul 整合,實現了服務註冊、服務發現和配置管理。Consul 強大的功能和 Spring Boot 的便捷整合,使得微服務架構的實現變得更加容易和高效。

著作權歸聚娃科技微賺淘客系統開發者團隊,轉載請註明出處!

相關文章