微服務架構已成為建構可擴展和模組化系統的流行解決方案。透過微服務,您可以將單一應用程式分解為更小的、獨立的和專業的服務,這使得系統的維護和發展變得更加容易。在這篇文章中,我們將探討如何使用 Spring Boot 和 Spring Cloud 來創造健壯且有效率的微服務。
微服務簡介
微服務背後的主要思想是將應用程式拆分為可以獨立開發、部署和擴展的小型服務。每個微服務應該負責特定的功能,並以輕量級的方式與其他服務進行通信,通常使用 REST API 或訊息傳遞。
微服務的一些優點包括:
現在,讓我們來看看如何使用Spring Boot和Spring Cloud創建和管理微服務。
Spring Boot 專注於最少的配置和快速啟動,因此可以輕鬆建立微服務。讓我們先建立兩個微服務:「使用者」服務(User-service)和「訂單」服務(Order-service)。
要設定微服務,您可以使用 Spring Initializr 產生具有所需相依性的新項目,例如 Spring Web 和 Spring Data JPA。以下是用戶服務中 REST 控制器的基本範例:
@RestController @RequestMapping("/users") public class UserController { @GetMapping("/{id}") public ResponseEntitygetUserById(@PathVariable Long id) { User user = new User(id, "Matheus"); return ResponseEntity.ok(user); } }
每個微服務可以擁有自己的資料庫,保證服務獨立、解耦。對於使用者服務,我們可以使用 H2 或 PostgreSQL 等設定。
@RestController @RequestMapping("/orders") public class OrderController { private final RestTemplate restTemplate; public OrderController(RestTemplate restTemplate) { this.restTemplate = restTemplate; } @GetMapping("/{id}") public ResponseEntitygetOrderById(@PathVariable Long id) { User user = restTemplate.getForObject("http://user-service/users/" id, User.class); Order order = new Order(id, user, "Order details"); return ResponseEntity.ok(order); } }
RestTemplate 用於在微服務之間發出 HTTP 請求。
使用 Spring Cloud 管理微服務
雖然 Spring Boot 有助於快速建立微服務,但 Spring Cloud 提供了額外的工具來管理分散式環境中這些服務的通訊和彈性。讓我們介紹一些基本組件。
eureka: client: service-url: defaultZone: http://localhost:8761/eureka/
現在,服務將自動註冊到Eureka,使它們更容易發現彼此。
新增 spring-cloud-starter-gateway 依賴以建立簡單閘道:
spring: cloud: gateway: routes: - id: user-service uri: lb://USER-SERVICE predicates: - Path=/users/** - id: order-service uri: lb://ORDER-SERVICE predicates: - Path=/orders/**
這樣,任何對 /users/** 的請求都將被路由到用戶服務,這同樣適用於 /orders/**。
3.** 斷路器的彈性 (Hystrix)**
在微服務環境中,失敗是不可避免的。 Hystrix 是一個斷路器,透過隔離故障來保護服務免受過載。以下是如何將其應用於使用其他服務的方法的範例:
@HystrixCommand(fallbackMethod = "fallbackGetUser") public User getUser(Long id) { return restTemplate.getForObject("http://user-service/users/" id, User.class); } public User fallbackGetUser(Long id) { return new User(id, "Default User"); }
如果使用者服務失敗,將呼叫fallbackGetUser方法,確保系統保持功能。
Spring Boot 與 Spring Cloud 相結合,為開發可擴展且有彈性的微服務提供了出色的基礎設施。透過服務發現、路由和故障管理等功能,您的應用程式將為在分散式動態環境中運行做好充分準備。
無論您是從單體應用程式遷移到微服務還是從頭開始,Spring Boot 和 Spring Cloud 都可以加速您的流程並確保堅實的架構。
您喜歡這篇文章嗎?如果您有任何問題或建議,請在評論中留下!並且不要忘記與可以從這些技巧中受益的其他開發人員分享。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3