本文說明如何使用 Spring Cloud Azure 和 Spring Messaging Azure 事件中樞。 Spring Framework 提供與傳訊系統整合的廣泛支援。
Spring Messaging 與 Azure 事件中心
重要概念
Azure 事件中樞是雲端中的原生數據串流服務,每秒可串流數百萬個事件,且延遲低,從任何來源到任何目的地。 適用於 Azure 事件中樞的 Spring Messaging 專案會將核心 Spring 概念套用至事件中樞型傳訊解決方案的開發。 它會提供 範本 作為傳送訊息的高階抽象概念。 它也支援帶有 @EventHubsListener 註解和 監聽器容器的訊息驅動普通 Java 物件(POJO)。 這些連結庫會提升相依性插入和宣告式組態的使用。 在這些情況下,您可以看到 Spring Framework 中的 JMS 支援和 Spring AMQP 中的 RabbitMQ 支援相似之處。
相依性設定
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter</artifactId>
</dependency>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-messaging-azure-eventhubs</artifactId>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-messaging-eventhubs-checkpointstore-blob</artifactId>
</dependency>
設定
此程式庫提供下列供 EventHubsTemplate 和 @EventHubsListener 使用的組態選項:
| 財產 | 類型 | 說明 |
|---|---|---|
spring.cloud.azure.message-converter.isolated-object-mapper |
布爾值 | 隔離的 ObjectMapper bean 是否用於事件中樞訊息轉換器。 默認為啟用。 |
spring.cloud.azure.eventhubs.enabled |
布爾值 | 是否啟用 Azure 事件中樞。 |
spring.cloud.azure.eventhubs.connection-string |
繩子 | 事件中樞命名空間連接字串值。 |
spring.cloud.azure.eventhubs.namespace |
繩子 | Event Hubs 命名空間值,也就是 FQDN 的前綴。 FQDN 應該由 NamespaceName.DomainName 組成 |
spring.cloud.azure.eventhubs.processor.checkpoint-store.account-name |
繩子 | 記憶體帳戶的名稱。 |
spring.cloud.azure.eventhubs.processor.checkpoint-store.account-key |
繩子 | 儲存體帳戶存取金鑰。 |
spring.cloud.azure.eventhubs.processor.checkpoint-store.container-name |
繩子 | 記憶體容器名稱。 |
基本用法
自訂 Event Hubs 訊息轉換器
有兩種方式可以設定事件中樞訊息轉換器:
設定下列屬性,讓預設的 Event Hubs 訊息轉換器使用
ObjectMapperBean,其可為您自訂的ObjectMapperBean,或由 Spring Boot 管理的 Bean:spring: cloud: azure: message-converter: isolated-object-mapper: false直接定義事件中樞訊息轉換器 Bean:
@Bean AzureMessageConverter<EventData, EventData> eventHubsMessageConverter() { JsonMapper jsonMapper = JsonMapper.builder().addModule(new JavaTimeModule()).build(); return new EventHubsMessageConverter(jsonMapper); }
將訊息傳送至 Azure 事件中樞
使用下列步驟來傳送訊息:
使用下列其中一種方法填入認證組態選項:
若使用
DefaultAzureCredential作為認證憑證,請在 application.yml 檔案中設定下列屬性:spring: cloud: azure: eventhubs: namespace: ${AZURE_EVENT_HUBS_NAMESPACE} processor: checkpoint-store: container-name: ${CHECKPOINT-CONTAINER} account-name: ${CHECKPOINT-STORAGE-ACCOUNT}針對認證作為連接字串,請在 application.yml 檔案中設定下列屬性:
spring: cloud: azure: eventhubs: connection-string: ${AZURE_EVENT_HUBS_CONNECTION_STRING} processor: checkpoint-store: container-name: ${CHECKPOINT-CONTAINER} account-name: ${CHECKPOINT-STORAGE-ACCOUNT} account-key: ${CHECKPOINT-ACCESS-KEY}針對認證作為受控識別,請在 application.yml 檔案中設定下列屬性:
spring: cloud: azure: credential: managed-identity-enabled: true client-id: ${AZURE_CLIENT_ID} eventhubs: namespace: ${AZURE_EVENT_HUBS_NAMESPACE} processor: checkpoint-store: container-name: ${CONTAINER_NAME} account-name: ${ACCOUNT_NAME}若使用服務主體認證,請在 application.yml 檔案中設定下列屬性:
spring: cloud: azure: credential: client-id: ${AZURE_CLIENT_ID} client-secret: ${AZURE_CLIENT_SECRET} profile: tenant-id: <tenant> eventhubs: namespace: ${AZURE_EVENT_HUBS_NAMESPACE} processor: checkpoint-store: container-name: ${CONTAINER_NAME} account-name: ${ACCOUNT_NAME}
備註
tenant-id允許下列值:common、organizations、consumers或租用戶標識符。 如需這些值的詳細資訊,請參閱 使用錯誤的端點(個人和組織帳戶)一節中的錯誤AADSTS50020 - 來自身分識別提供者的用戶帳戶不存在於租使用者。 如需轉換單一租使用者應用程式的資訊,請參閱 將單一租使用者應用程式轉換成多租使用者Microsoft Entra ID。
EventHubsTemplate會自動配置,您也可以如以下範例所示,將它直接自動裝配到您自己的 Bean 中:@Component public class MyBean { private final EventHubsTemplate eventHubsTemplate; public MyBean(EventHubsTemplate eventHubsTemplate) { this.eventHubsTemplate = eventHubsTemplate; } public void someMethod() { this.eventHubsTemplate.sendAsync('EVENT_HUB_NAME', MessageBuilder.withPayload("Hello world").build()).subscribe(); } }
從 Azure 事件中樞接收訊息
使用下列步驟來接收訊息:
填寫認證組態選項。
新增
@EnableAzureMessaging批注,如下列範例所示。 此註解會觸發尋找以@EventHubsListener註解的方法,並在幕後建立訊息接聽器容器。@SpringBootApplication @EnableAzureMessaging public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }備註
為避免重複,自
5.21.0版起,Spring Cloud Azure 自動設定會自動啟用註解@EnableAzureMessaging。當 Event Hubs 基礎結構存在時,您可以使用
@EventHubsListener註解任何 Bean,以建立接聽器端點。 下列元件會在EVENT_HUB_NAME事件中樞與$Default取用者群組上建立接聽端點:@Component public class MyBean { @EventHubsListener(destination = "EVENT_HUB_NAME", group = "$Default") public void processMessage(String content) { // ... } }
範例
欲了解更多資訊,請參閱 azure-spring-boot-samples GitHub 上的倉庫。