本文說明如何使用 Spring Cloud Azure 和 Spring Messaging Azure 記憶體佇列。 Spring Framework 提供與傳訊系統整合的廣泛支援。
Spring Messaging 的 Azure 儲存體佇列服務
重要概念
Azure 佇列記憶體是用來儲存大量訊息的服務。 您可以使用 HTTP 或 HTTPS 透過已驗證的呼叫,從世界各地存取訊息。 佇列訊息的大小最多可達 64 KB。 佇列可以包含數百萬則訊息,最多可達記憶體帳戶的總容量限制。 佇列通常用來建立待處理的工作積壓,以進行異步處理。 適用於 Azure 佇列記憶體的 Spring Messaging 專案會將核心 Spring 概念套用至服務總線型傳訊解決方案的開發。 它提供 範本 作為傳送和接收訊息的高階抽象概念。 這些連結庫會提升相依性插入和宣告式組態的使用。
相依性設定
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter</artifactId>
</dependency>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-messaging-azure-storage-queue</artifactId>
</dependency>
設定
程式庫為 StorageQueueTemplate 提供下列組態選項:
| 財產 | 類型 | 說明 |
|---|---|---|
spring.cloud.azure.message-converter.isolated-object-mapper |
布爾值 | 是否使用獨立的 ObjectMapper bean 作為儲存體佇列訊息轉換器。 默認為啟用。 |
spring.cloud.azure.storage.queue.enabled |
布爾值 | 是否啟用 Azure 記憶體佇列。 |
spring.cloud.azure.storage.queue.connection-string |
繩子 | 記憶體佇列命名空間連接字串值。 |
spring.cloud.azure.storage.queue.accountName |
繩子 | 記憶體佇列帳戶名稱。 |
spring.cloud.azure.storage.queue.accountKey |
繩子 | 儲存體佇列帳戶金鑰。 |
基本用法
自訂儲存體佇列訊息轉換器
有兩種方式可以設定記憶體佇列訊息轉換器:
設定下列屬性,讓預設的儲存體佇列訊息轉換器使用 `
ObjectMapper` Bean,而該 Bean 可以是您的自訂 `ObjectMapper` Bean,或是由 Spring Boot 管理的 Bean:spring: cloud: azure: message-converter: isolated-object-mapper: false直接定義儲存體佇列訊息轉換器 Bean:
@Bean AzureMessageConverter<QueueMessageItem, QueueMessageItem> storageQueueMessageConverter() { JsonMapper jsonMapper = JsonMapper.builder().addModule(new JavaTimeModule()).build(); return new ServiceBusMessageConverter(jsonMapper); }
將訊息傳送和接收至 Azure 記憶體佇列
使用下列步驟來傳送和接收訊息:
使用下列其中一種方法填入認證組態選項:
若使用
DefaultAzureCredential作為認證憑證,請在 application.yml 檔案中設定下列屬性:spring: cloud: azure: storage: queue: account-name: ${AZURE_STORAGE_QUEUE_ACCOUNT_NAME}針對認證作為連接字串,請在 application.yml 檔案中設定下列屬性:
spring: cloud: azure: storage: queue: connection-string: ${AZURE_STORAGE_QUEUE_CONNECTION_STRING}針對認證作為受控識別,請在 application.yml 檔案中設定下列屬性:
spring: cloud: azure: credential: managed-identity-enabled: true client-id: ${AZURE_CLIENT_ID} profile: tenant-id: <tenant> storage: queue: account-name: ${AZURE_STORAGE_QUEUE_ACCOUNT_NAME}
備註
tenant-id允許下列值:common、organizations、consumers或租用戶標識符。 如需這些值的詳細資訊,請參閱 使用錯誤的端點(個人和組織帳戶)一節中的錯誤AADSTS50020 - 來自身分識別提供者的用戶帳戶不存在於租使用者。 如需轉換單一租使用者應用程式的資訊,請參閱 將單一租使用者應用程式轉換成多租使用者Microsoft Entra ID。
若使用服務主體認證,請在 application.yml 檔案中設定下列屬性:
spring: cloud: azure: credential: client-id: ${AZURE_CLIENT_ID} client-secret: ${AZURE_CLIENT_SECRET} profile: tenant-id: <tenant> storage: queue: account-name: ${AZURE_STORAGE_QUEUE_ACCOUNT_NAME}
備註
tenant-id允許下列值:common、organizations、consumers或租用戶標識符。 如需這些值的詳細資訊,請參閱 使用錯誤的端點(個人和組織帳戶)一節中的錯誤AADSTS50020 - 來自身分識別提供者的用戶帳戶不存在於租使用者。 如需轉換單一租使用者應用程式的資訊,請參閱 將單一租使用者應用程式轉換成多租使用者Microsoft Entra ID。
StorageQueueTemplate已自動設定。 您可以將它直接連線到您自己的豆類以傳送或接收訊息,如下列範例所示:@Component public class MyBean { private final StorageQueueTemplate storageQueueTemplate; public MyBean(StorageQueueTemplate storageQueueTemplate) { this.storageQueueTemplate = storageQueueTemplate; } public void someMethod() { this.serviceBusTemplate.sendAsync('STORAGE_QUEUE_NAME', MessageBuilder.withPayload("Hello world").build()).subscribe(); } public void processMessage() { Message<?> message = storageQueueTemplate.receiveAsync('STORAGE_QUEUE_NAME', Duration.ofSeconds(30)).block(); // ... } }
範例
欲了解更多資訊,請參閱 azure-spring-boot-samples GitHub 上的倉庫。