一、概述
Spring Cloud Context是Spring Cloud的一個重要組件,它提供了通用的上下文(Context)服務。
上下文(Context)是應用程序運行時狀態的容器,是程序在運行時需要訪問的所有信息和對象。
Spring Cloud Context 就相當於一個通用的存儲信息的容器,預先定義好各種標準信息格式,在應用程序運行時動態更新信息,方便程序訪問和使用。
二、應用場景
Spring Cloud Context 的主要應用場景可以分為三個方面:
- 應用程序級別的上下文(Application Context):Spring Boot 應用程序中用於初始化並裝載所有 Bean 的應用程序上下文(ApplicationContext)對象。
- Cloud 級別的上下文(Cloud Context):為應用程序提供 Cloud 環境下所需的服務,例如服務發現、服務路由和 Cloud 事件等。
- 事件體系:Spring Cloud Context 提供了一個基於事件的機制,以便應用程序可以訂閱和發布雲環境中各種事件的消息,用於處理處理事件回調等。
三、應用實例
1. 創建Spring Boot應用程序
首先我們先在 IDEA 中創建一個新的Spring Boot 項目。
@SpringBootApplication public class SpringCloudDemoApplication { public static void main(String[] args) { SpringApplication.run(SpringCloudDemoApplication.class, args); } }
2. 創建 Cloud Context Objects
Spring Cloud Context 為開發人員提供了一組 Cloud Context 對象,這些 Cloud Context 對象用於分別在本地和 Cloud 環境下管理應用程序。下面我們就來看框架都提供了哪些 Cloud Context 對象。
(1)Application Context (應用程序上下文)
應用程序上下文是 Spring Boot 應用程序裝載 bean 的容器,在 Spring Boot 項目啟動時自動創建的。
下面我們創建一個自定義的 Bean ,並在控制器中調用該 Bean:
@SpringBootApplication public class SpringCloudDemoApplication { public static void main(String[] args) { SpringApplication.run(SpringCloudDemoApplication.class, args); } @Bean public String sayHello() { return "Hello, world!"; } } @RestController public class DemoController { @Autowired private String sayHello; @RequestMapping("/") public String home() { return sayHello; } }
(2)Environment Context (環境上下文)
提供了再與應用程序間傳遞數據的統一介面;例如,配置文件,初始化參數和環境變數等。
我們可以通過在屬性配置文件中設置不同的 profile 信息來模擬不同的環境。例如,我們可以在配置文件中分別定義一個「prod」和「dev」環境。
server.port=8080 spring.profiles.active=dev dev: welcome.message=Hello, Development Environment! prod: welcome.message=Hello, Production Environment!
然後我們可以通過 Environment 的 API 來獲取不同環境下的配置文件信息。
@RestController public class DemoController { @Autowired private Environment environment; @RequestMapping("/") public String home() { String message = environment.getProperty("welcome.message"); return message; } }
(3)Cloud Context (Cloud 上下文)
用於註冊和使用服務發現客戶端、負載均衡客戶端和 Cloud 事件等的上下文。
下面我們先創建一個 Eureka 服務註冊中心,並在控制器中使用 Eureka 的客戶端 API 獲取服務實例信息。
@SpringBootApplication @EnableDiscoveryClient public class SpringCloudDemoApplication { public static void main(String[] args) { SpringApplication.run(SpringCloudDemoApplication.class, args); } } @RestController public class DemoController { @Autowired private DiscoveryClient discoveryClient; @RequestMapping("/") public String home() { List instances = discoveryClient.getInstances("EUREKA-CLIENT"); if (instances != null && instances.size() > 0) { return instances.get(0).getUri().toString(); } return "Service Not Available!"; } }
(4)Event Bus (事件匯流排)
Spring Cloud Context 提供了一個基於事件的機制,以便應用程序可以訂閱和發布雲環境中各種事件的消息,用於處理處理事件回調等。
下面我們來看一下如何通過 Spring Cloud Bus 發布事件消息,並在消息訂閱方進行處理。
服務提供方:
@SpringBootApplication public class SpringCloudDemoApplication { public static void main(String[] args) { SpringApplication.run(SpringCloudDemoApplication.class, args); } @Bean @RefreshScope public String config() { return "default config..."; } } @RestController public class DemoController { @Autowired private String config; @RequestMapping("/") public String home() { return config; } }
服務訂閱方:
@SpringBootApplication @EnableEurekaClient public class SpringCloudDemoApplication { public static void main(String[] args) { SpringApplication.run(SpringCloudDemoApplication.class, args); } @EventListener public void onMessage(RemoteApplicationEvent event) { if (event instanceof RefreshRemoteApplicationEvent) { System.out.println("config refreshed!"); } } }
四、小結
Spring Cloud Context 是 Spring Cloud 的一個重要組件,它提供了通用的上下文(Context)服務。它可以幫助我們輕鬆地處理不同環境下的應用程序上下文、配置信息以及 Cloud 級別上下文,還可以使用基於事件的機制幫助我們處理各種雲環境中的消息和事件。Spring Cloud Context 使得開發人員可以更加專註於應用程序代碼的開發,同時也方便了應用程序的部署和測試。
原創文章,作者:FKWWZ,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/363823.html