Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este artigo descreve como usar o Azure Service Bus com a API JMS integrada no framework Spring JMS.
Principais características
Ligação sem palavra-passe
A ligação sem palavra-passe utiliza autenticação Microsoft Entra para se ligar aos serviços do Azure sem armazenar quaisquer credenciais na aplicação, nos seus ficheiros de configuração ou nas variáveis do ambiente. A autenticação Microsoft Entra é um mecanismo para ligar ao Azure Service Bus utilizando identidades definidas no Microsoft Entra ID. Com a autenticação Microsoft Entra, pode gerir o Service Bus e outros serviços Microsoft Services numa localização central, o que simplifica a gestão de permissões.
Como funciona
O Spring Cloud Azure constrói primeiro um dos seguintes tipos de credenciais, dependendo da configuração de autenticação da aplicação:
ClientSecretCredentialClientCertificateCredentialUsernamePasswordCredentialManagedIdentityCredential
Se nenhum desses tipos de credenciais for encontrado, a cadeia de credenciais via DefaultTokenCredential será usada para obter credenciais de propriedades de aplicativos, variáveis de ambiente, identidade gerenciada ou IDEs. Para mais informações, consulte
Configuração de dependência
Adicione as seguintes dependências se quiser migrar a sua aplicação Spring JMS para usar o Azure Service Bus.
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-servicebus-jms</artifactId>
</dependency>
Configuração
A tabela a seguir descreve as propriedades configuráveis ao usar o suporte ao Spring JMS:
| Propriedade | Descrição |
|---|---|
spring.jms.servicebus.connection-string |
A Azure Service Bus cadeia de ligação, para quando quiser fornecer o cadeia de ligação diretamente. |
spring.jms.servicebus.topic-client-id |
O ID do cliente JMS. Só funciona para o feijão topicJmsListenerContainerFactory. |
spring.jms.servicebus.enabled |
Um valor que indica se deve ativar a autoconfiguração do Service Bus JMS. O valor padrão é true. |
spring.jms.servicebus.idle-timeout |
A duração do timeout de inatividade da ligação indica quanto tempo o cliente espera que o Service Bus mantenha a ligação ativa quando não são entregues mensagens. O valor padrão é 2m. |
spring.jms.servicebus.passwordless-enabled |
Se ativar passwordless para Azure Service Bus JMS. O valor padrão é false. |
spring.jms.servicebus.pricing-tier |
The Azure Service Bus Price Tier. Os valores suportados são premium e standard. O nível premium usa o Java Message Service (JMS) 2.0, enquanto o nível padrão usa o JMS 1.1 para interagir com o Azure Service Bus. |
spring.jms.servicebus.listener.reply-pub-sub-domain |
Um valor que indica se o tipo de destino da resposta é um tópico. Só funciona para o feijão topicJmsListenerContainerFactory. |
spring.jms.servicebus.listener.phase |
A fase em que este recipiente deve ser iniciado e parado. |
spring.jms.servicebus.listener.reply-qos-settings |
Configura o QosSettings a ser usado ao enviar uma resposta. |
spring.jms.servicebus.listener.subscription-durable |
Um valor que indica se a assinatura deve ser durável. Só funciona para o feijão topicJmsListenerContainerFactory. O valor padrão é true. |
spring.jms.servicebus.listener.subscription-shared |
Um valor que indica se a assinatura deve ser compartilhada. Só funciona para o feijão topicJmsListenerContainerFactory. |
spring.jms.servicebus.pool.block-if-full |
Um valor que indica se uma conexão deve ser bloqueada e o pool está cheio. Defina como false para lançar um JMSException em vez disso. |
spring.jms.servicebus.pool.block-if-full-timeout |
O período de bloqueio antes de lançar uma exceção se a piscina ainda estiver cheia. |
spring.jms.servicebus.pool.enabled |
Um valor que indica se um JmsPoolConnectionFactory deve ser criado, em vez de um ConnectionFactoryregular. |
spring.jms.servicebus.pool.idle-timeout |
O tempo limite ocioso do pool de conexões. |
spring.jms.servicebus.pool.max-connections |
O número máximo de conexões agrupadas. |
spring.jms.servicebus.pool.max-sessions-per-connection |
O número máximo de sessões em pool por conexão no pool. |
spring.jms.servicebus.pool.time-between-expiration-check |
O tempo para dormir entre as execuções do fio de despejo de conexão ociosa. Quando negativo, nenhum thread de remoção de conexão ociosa é executado. |
spring.jms.servicebus.pool.use-anonymous-producers |
Um valor que indica se deve usar apenas uma instância MessageProducer anônima. Defina-o como false para criar um MessageProducer sempre que for necessário. |
spring.jms.servicebus.prefetch-policy.all |
O valor de reserva para a opção de prefetch neste namespace do Service Bus. O valor padrão é 0. |
spring.jms.servicebus.prefetch-policy.durable-topic-prefetch |
O número de pré-busca para tópico durável. O valor padrão é 0. |
spring.jms.servicebus.prefetch-policy.queue-browser-prefetch |
O número de pré-busca para o navegador de fila. O valor padrão é 0. |
spring.jms.servicebus.prefetch-policy.queue-prefetch |
O número de pré-busca para fila. O valor padrão é 0. |
spring.jms.servicebus.prefetch-policy.topic-prefetch |
O número de pré-busca por tópico. O valor padrão é 0. |
Observação
A configuração geral do Spring JMS é omitida para abreviar.
Para obter mais informações, consulte Spring JMS Document.
Utilização básica
Conectar-se ao Azure Service Bus JMS usando passwordless
Configure as seguintes propriedades no arquivo application.yml:
spring:
jms:
servicebus:
namespace: ${AZURE_SERVICEBUS_NAMESPACE}
pricing-tier: ${PRICING_TIER}
passwordless-enabled: true
Importante
O Azure Service Bus JMS suporta a utilização do Microsoft Entra ID para autorizar pedidos a recursos do Service Bus. Com Microsoft Entra ID, certifique-se de que atribuiu a função Azure Service Bus Proprietário dos Dados à conta Microsoft Entra que está a usar atualmente. Para mais informações, consulte Atribuir Azure funções usando o portal Azure.
Connect to Azure Service Bus with JMS use Managed Identity
Para usar a identidade gerida, ative a identidade gerida para o seu serviço e atribua o papel
Azure Service Bus Data Owner. Para mais informações, consulte Autenticar uma identidade gerida com Microsoft Entra ID para aceder a Azure Service Bus recursos.Configure as seguintes propriedades no arquivo application.yml:
spring: cloud: azure: credential: managed-identity-enabled: true jms: servicebus: namespace: ${AZURE_SERVICEBUS_NAMESPACE} pricing-tier: ${PRICING_TIER} passwordless-enabled: trueImportante
Se você estiver usando a identidade gerenciada atribuída pelo usuário, também precisará adicionar a propriedade
spring.cloud.azure.credential.client-idcom sua ID de cliente de identidade gerenciada atribuída pelo usuário.
Conectar-se ao Azure Service Bus JMS usando cadeia de ligação
Adicione as seguintes propriedades e pronto.
spring:
jms:
servicebus:
connection-string: ${AZURE_SERVICEBUS_CONNECTION_STRING}
pricing-tier: ${PRICING_TIER}
Observação
A Microsoft recomenda utilizar o fluxo de autenticação mais seguro disponível. O fluxo de autenticação descrito neste procedimento, como para bancos de dados, caches, mensagens ou serviços de IA, requer um grau muito alto de confiança no aplicativo e traz riscos não presentes em outros fluxos. Use esse fluxo somente quando opções mais seguras, como identidades gerenciadas para conexões sem senha ou sem chave, não forem viáveis. Para operações de máquina local, prefira identidades de usuário para conexões sem senha ou sem chave.
Conexões
O Spring Cloud Azure fornece as seguintes três opções de Connection Factory para ligação ao Azure Service Bus JMS:
JmsPoolConnectionFactory: Esta fábrica mantém um pool de ligações com opções personalizáveis comospring.jms.servicebus.pool.max-connections. Mais definições de configuração do pool - com o prefixospring.jms.servicebus.pool.- são detalhadas na secção de Configuração . Esta configuração melhora o desempenho ao utilizar a capacidade de balanceamento de carga do Azure Service Bus, distribuindo o tráfego entre múltiplos endpoints.CachingConnectionFactory: Esta fábrica reutiliza uma única ligação para todas as chamadas paraJmsTemplate, reduzindo a sobrecarga da criação da ligação, o que é ideal para cenários de baixo tráfego. No entanto, este modo não utiliza a capacidade de balanceamento de carga do Azure Service Bus.ServiceBusJmsConnectionFactory: Neste modo, cada chamada paraJmsTemplatecria uma nova ligação, que pode ser intensiva em recursos e menos eficiente.
Quando as três classes existem no caminho de classe, qual é usada? A tabela seguinte descreve quais são usados com base nas propriedades de configuração (desde Spring Cloud Azure 7.2.0 e 6.2.0):
spring.jms.servicebus.pool.enabled |
spring.jms.cache.enabled |
Remetente ConnectionFactory |
Contentor de Ouvintes ConnectionFactory |
|---|---|---|---|
| não definido | não definido | CachingConnectionFactory |
ServiceBusJmsConnectionFactory |
| não definido | true |
CachingConnectionFactory |
CachingConnectionFactory |
| não definido | false |
ServiceBusJmsConnectionFactory |
ServiceBusJmsConnectionFactory |
true |
não definido | JmsPoolConnectionFactory |
JmsPoolConnectionFactory |
true |
true |
CachingConnectionFactory |
CachingConnectionFactory |
true |
false |
JmsPoolConnectionFactory |
JmsPoolConnectionFactory |
false |
não definido | CachingConnectionFactory |
ServiceBusJmsConnectionFactory |
false |
true |
CachingConnectionFactory |
CachingConnectionFactory |
false |
false |
ServiceBusJmsConnectionFactory |
ServiceBusJmsConnectionFactory |
Observação
A tabela seguinte mostra o ConnectionFactory predefinido quando tanto spring.jms.servicebus.pool.enabled como spring.jms.cache.enabled não estão definidos para diferentes versões do Spring Cloud Azure:
| Spring Cloud Azure versão | Remetente ConnectionFactory |
Contentor de ouvinte ConnectionFactory |
|---|---|---|
| >= 6.2.0 ou >= 7.2.0 | CachingConnectionFactory |
ServiceBusJmsConnectionFactory |
| 6.1.0 e 7.0.0 | ServiceBusJmsConnectionFactory |
ServiceBusJmsConnectionFactory |
| <= 6.1.0 | JmsPoolConnectionFactory |
JmsPoolConnectionFactory |
Amostras
Para mais informações, consulte o repositório azure-spring-boot-samples no GitHub.