Spring Cloud微服務運營配置教程
在前面教程中,我們概括了進行微服務業務開發時需要的三個基礎功能:註冊伺服器、斷路器和Feign客戶端,有了這三個元件,你基本可以在本地進行微服務開發,但是在正式Spring Cloud生產環境中,還需要配置伺服器,這樣可以實現動態配置管理,同時需要類似Nginx這樣閘道器路由器Zuul或Spring Cloud Gateway,這兩個元件是生產執行配置方面:
1. Spring Cloud Bus
如何將配置推送到分散式微服務節點?本上我在生產中看到了以下解決方案:
- 使用分散式快取(Hazelcast,Oracle Coherence ...)
- 透過JMS或AMPQ等中介軟體推送設定。
Spring Cloud中的一個選項是使用Spring Cloud Bus,它或多或少是我列表中的第二個選項。節點之間的資訊傳輸正在透過AMPQ協議完成,但是他們在路線圖上有其他傳輸方式如JMS。現在我們使用AMPQ。
使用RabbitMQ和Spring Cloud Bus
需要做的就是:
- 將spring-cloud-starter-bus-amqp依賴項新增到classpath
- 確保訊息中介軟體正在執行。
- 如果你在localhost(測試)上執行它,你不需要做任何事情.。如果您單獨執行RabbitMQ,則需要在每個節點上配置以下內容:
spring: rabbitmq: host: <broker host> port: <broker port> username: <broker user> password: <broker password> |
配置Spring Cloud Config Server
Spring Cloud Bus提供的是將指令或配置傳送到偵聽匯流排的MicroServices,以透過以下內建HTTP端點觸發的AMPQ訊息重新載入Spring應用程式屬性(它的行為類似於分散式actuator):
"to invoke the reload of all application.properties of all MicroServices listening on the BUS"
/bus/refresh
"to invoke the reload of application.properties config of specific MicroService"
/bus/refresh?destination=<spring.application.name>:<app port>
"to send a specific key/value pair to MicroService Spring environment"
/bus/env
Spring Cloud Config通常是一個具有儲存在GIT倉庫中的屬性的元件。它們支援許多公共git入口網站,如GitHub,Bitbucket,GitLab ...如果您想使用其他儲存如資料庫來儲存屬性,也可以使用Oracle等配置。
現在使用GIT。我們將以下屬性儲存到此GIT倉庫中:
service.dataBatchSize = 1
在microservice-spring-cloud-bus / config資料夾下,配置pring Cloud Config伺服器的地址:
spring.cloud.config.server.git.uri=https://tomask79@bitbucket.org/tomask79/microservice-spring-cloud-bus.git spring.cloud.config.server.git.searchPaths=microservice-spring-cloud-bus, config |
這個配置在告訴伺服器根據spring.cloud.config.server.git.uri屬性值獲取配置儲存庫,並嘗試搜尋幾個資料夾以找到配置檔案。
我們將使用名為citiesService,personsService的兩個MicroServices 來監聽RabbitMQ匯流排。因此config子資料夾將包含citiesService.properties和personsService.properties檔案。
檔名對應到客戶端的spring.application.name屬性值。
客戶端使用Spring Cloud Config Server
每個MicroService都需要具有以下bootstrap.properties:
spring.cloud.config.uri=http://localhost:9999 spring.cloud.config.enabled=true |
這樣,這個微服務就可以到配置伺服器找到我之前配置的屬性service.dataBatchSize。讓我們在以下簡單的citiesService使用這個屬性。
@RestController @RefreshScope public class CitiesController { @Value("${service.dataBatchSize:0}") private int dataBatchSize; final City[] cities = { new City("Brno", "Czech republic"), new City("Bern", "Switzerland"), new City("Berlin", "Germany"), new City("London", "England") }; @RequestMapping("/cities") public Cities getCities() { final Cities result = new Cities(); for (int i=0; i < dataBatchSize; i++) { result.getCities().add(cities[i]); } return result; } } |
測試:
- 首先啟動RabbitMQ訊息系統(啟動取決於您安裝它的環境)
- git clone https://bitbucket.org/tomask79/microservice-spring-cloud-bus.git
- mvn clean install(在pom.xml的根資料夾中)
- cd spring-microservice-registry
- java -jar target / registry-0.0.1-SNAPSHOT.war
- 驗證NetFlix Eureka是否在http:// localhost:9761上執行
- cd ..
- cd spring-microservice-config
- java -jar target / config-0.0.1-SNAPSHOT.war
- cd ..
- cd spring-microservice-service1
- java -jar target / service1-0.0.1-SNAPSHOT.war
- 在http:// localhost:9761驗證citiesService已註冊
- cd ..
- cd spring-microservice-service2
- java -jar target / service2-0.0.1-SNAPSHOT.war
- 在http:// localhost:9761驗證personsService已經註冊
一切正常後可訪問:http://localhost:8081/cities
您應該看到大小等於“service.dataBatchSize”屬性的城市列表。現在更改GIT倉庫中citiesService.properties檔案中的屬性。如果您再次點選http:// localhost:8081 / cities,那麼您將看不到任何更改...要重新載入citiesService MicroService的Spring上下文,請執行以下命令:
(you can run this at any node having spring-cloud-starter-bus-amqp dependency) curl -X POST http://localhost:9999/bus/refresh |
也可以使用Postman的REST客戶端提交重新整理。
2. Spring Cloud Zuul作為微服務閘道器
在編寫微服務時,您將面臨以下問題:
- 來自客戶端的一個請求跨多個微服務呼叫
- 你需要如何做金絲雀版本釋出機制
- 您需要反向代理來呼叫微服務
類似Nginx一個總的入口閘道器。
Spring Cloud Zuul作為反向代理
在將微服務部署到Docker時,需要處理多個微服務對映到多個埠的問題。但是,您的API消費者不希望知道這些埠,他們只需要在8080埠呼叫其他所有埠的所有內容。這裡有很多解決方案,但使用Spring Cloud Zuul真的很棒!
讓我們在埠8081和8082上執行兩個微服務citiesService和personsService的先前演示,併為此做出反向代理,以便可以在一個埠下呼叫這兩個服務:
http://localhost:8080/cities -> (redirect) -> http://localhost:8081/cities http://localhost:8080/persons -> (redirect) -> http://localhost:8082/cities |
在 Spring Cloud Zuul 下配置:
spring.application.name=personsService eureka.client.serviceUrl.defaultZone=http://localhost:9761/eureka eureka.client.healthcheck.enabled=true zuul.routes.persons.path=/persons zuul.routes.persons.serviceId=personsService zuul.routes.cities.path=/cities zuul.routes.cities.serviceId=citiesService ribbon.eureka.enabled=true server.port=8080 |
我們在這裡有兩條路由: /persons 和/cities。每次對路由'/ persons'的呼叫都將被重定向到在Netflix Eureka伺服器上註冊的personsService 。每次呼叫“/ cities”網址都會被重定向到在Eureka註冊的cititesService。
測試:
* Start RabbitMQ broker first (start depends on the environment you've got it installed in) * git clone https://bitbucket.org/tomask79/microservice-spring-cloud-zuul.git * mvn clean install (in the root folder with pom.xml) * cd spring-microservice-registry * java -jar target/registry-0.0.1-SNAPSHOT.war verify that NetFlix Eureka is running at http://localhost:9761 * cd .. * cd spring-microservice-config * java -jar target/config-0.0.1-SNAPSHOT.war * cd .. * cd spring-microservice-service1 * java -jar target/service1-0.0.1-SNAPSHOT.war verify at http://localhost:9761 that citiesService has been registered * cd .. * cd spring-microservice-service2 * java -jar target/service2-0.0.1-SNAPSHOT.war verify at http://localhost:9761 that personsService has been registered * cd .. * cd spring-microservice-zuul * java -jar target/spring-cloud-zuul-0.0.1-SNAPSHOT.war (this will start your reverse proxy) |
在瀏覽器執行:
http://localhost:8080/persons http://localhost:8080/cities |
點選標題見原文
其他: Spring Cloud微服務雲應用教程
相關文章
- spring cloud分散式微服務-配置中心git示例SpringCloud分散式微服務Git
- Spring Cloud構建微服務架構—配置中心SpringCloud微服務架構
- 一篇文章概括Spring Cloud微服務教程SpringCloud微服務
- spring cloud 微服務實戰SpringCloud微服務
- spring cloud 和 阿里微服務spring cloud AlibabaSpringCloud阿里微服務
- 微服務Spring Cloud17_Spring Cloud概述3微服務SpringCloud
- Spring Cloud 微服務視訊教程-百度雲SpringCloud微服務
- Spring Cloud教程 第九彈 微服務閘道器ZuulSpringCloud微服務Zuul
- Spring Cloud構建微服務架構分散式配置中心SpringCloud微服務架構分散式
- spring cloud分散式微服務:Spring Cloud ConfigSpringCloud分散式微服務
- 微服務:spring-cloud-archaius 起步微服務SpringCloudAI
- [譯] JWT 與 Spring Cloud 微服務JWTSpringCloud微服務
- 微服務SpringCloud之Spring Cloud Config配置中心Git微服務SpringGCCloudGit
- spring cloud微服務分散式雲架構Spring Cloud ZuulSpringCloud微服務分散式架構Zuul
- spring cloud微服務分散式雲架構-Spring Cloud BusSpringCloud微服務分散式架構
- 微服務 | Spring Cloud(一):從單體SSM 到 Spring Cloud微服務SpringCloudSSM
- Spring Cloud構建微服務架構-spring cloud服務監控中心SpringCloud微服務架構
- Spring Cloud 微服務開發系列整理SpringCloud微服務
- Spring Cloud Stream微服務訊息框架SpringCloud微服務框架
- 微服務閘道器 Spring Cloud Gateway微服務SpringCloudGateway
- 微服務 Spring cloud 各元件介紹微服務SpringCloud元件
- Spring Cloud Alibaba微服務實戰SpringCloud微服務
- 微服務架構:Dubbo VS Spring Cloud微服務架構SpringCloud
- spring cloud微服務架構設計SpringCloud微服務架構
- Spring Cloud 微服務的那點事SpringCloud微服務
- Spring Cloud 微服務架構進階SpringCloud微服務架構
- 理解Spring Cloud微服務框架核心元件SpringCloud微服務框架元件
- 部署Azure Spring Cloud微服務應用SpringCloud微服務
- 基於Spring Cloud的微服務落地SpringCloud微服務
- 【docker&spring cloud】微服務化改造DockerSpringCloud微服務
- spring cloud微服務分散式雲架構 - Spring Cloud簡介SpringCloud微服務分散式架構
- java版電子商務spring cloud分散式微服務-大話Spring CloudJavaSpringCloud分散式微服務
- spring cloud分散式微服務-springboot省去web.xml配置Cloud分散式微服務Spring BootWebXML
- Spring Cloud構建微服務架構:分散式配置中心(加密解密)SpringCloud微服務架構分散式加密解密
- spring cloud網際網路分散式微服務雲平臺規劃分析--spring cloud服務統一配置中心SpringCloud分散式微服務
- spring cloud微服務分散式雲架構-Spring Cloud NetflixSpringCloud微服務分散式架構
- (一)spring cloud微服務分散式雲架構-Spring Cloud簡介SpringCloud微服務分散式架構
- (一)spring cloud微服務分散式雲架構 - Spring Cloud簡介SpringCloud微服務分散式架構