【java深入學習第4章】精通 Java 微服務:Spring Boot 與 Spring Cloud 的核心技術與設計準則

自足發表於2024-07-14

在現代軟體開發中,微服務架構因其靈活性和可擴充套件性而備受青睞。本文將探討Java微服務架構中的關鍵技術和設計原則,並透過Spring Boot和Spring Cloud提供程式碼示例,展示如何構建一個簡單的微服務應用。

關鍵技術和設計原則

  1. 服務拆分:將單體應用拆分為多個獨立的微服務,每個服務負責特定的業務功能。
  2. 獨立部署:每個微服務可以獨立部署和擴充套件,減少了服務之間的耦合。
  3. API閘道器:提供統一的入口,管理和路由請求到相應的微服務。
  4. 服務發現:動態發現微服務例項,支援負載均衡和故障轉移。
  5. 配置管理:集中管理微服務的配置,支援配置的動態更新。
  6. 容錯和監控:實現服務的高可用性和可觀測性,確保系統的穩定執行。

使用Spring Boot和Spring Cloud構建微服務

我們將構建一個簡單的微服務應用,包括以下元件:

  1. 服務註冊中心(Eureka Server)
  2. 配置中心(Spring Cloud Config Server)
  3. API閘道器(Spring Cloud Gateway)
  4. 兩個業務微服務
1. 服務註冊中心(Eureka Server)

建立一個Spring Boot專案,新增以下依賴:

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

在主類中啟用Eureka Server:

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

application.yml中配置Eureka Server:

server:
  port: 8761

eureka:
  client:
    register-with-eureka: false
    fetch-registry: false
2. 配置中心(Spring Cloud Config Server)

建立一個Spring Boot專案,新增以下依賴:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
</dependency>

在主類中啟用Config Server:

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

application.yml中配置Config Server:

server:
  port: 8888

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/your-repo/config-repo
3. API閘道器(Spring Cloud Gateway)

建立一個Spring Boot專案,新增以下依賴:

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

application.yml中配置API閘道器:

server:
  port: 8080

spring:
  cloud:
    gateway:
      routes:
        - id: service1
          uri: lb://SERVICE1
          predicates:
            - Path=/service1/**
        - id: service2
          uri: lb://SERVICE2
          predicates:
            - Path=/service2/**

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
4. 業務微服務

建立兩個Spring Boot專案,分別命名為service1service2,並新增以下依賴:

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

service1的主類中:

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

service2的主類中:

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

service1service2application.yml中分別配置:

spring:
  application:
    name: service1
  cloud:
    config:
      uri: http://localhost:8888

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
spring:
  application:
    name: service2
  cloud:
    config:
      uri: http://localhost:8888

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

service1service2中分別建立一個簡單的REST控制器:

@RestController
@RequestMapping("/service1")
public class Service1Controller {
    @GetMapping("/hello")
    public String hello() {
        return "Hello from Service 1";
    }
}
@RestController
@RequestMapping("/service2")
public class Service2Controller {
    @GetMapping("/hello")
    public String hello() {
        return "Hello from Service 2";
    }
}

執行和測試

  1. 啟動Eureka Server。
  2. 啟動Config Server。
  3. 啟動API閘道器。
  4. 啟動Service1和Service2。

訪問以下URL進行測試:

  • http://localhost:8080/service1/hello 應返回 "Hello from Service 1"
  • http://localhost:8080/service2/hello 應返回 "Hello from Service 2"

透過以上步驟,我們成功構建了一個簡單的微服務架構應用,展示瞭如何使用Spring Boot和Spring Cloud實現服務註冊、配置管理和API閘道器等關鍵功能。希望這篇文章對你理解和實踐Java微服務架構有所幫助。

AI寫論文,AI4.0技術加持,有需速入👉:AI寫論文 🔥🔥🔥

相關文章