Partilhar via


Usar o Barramento de Serviço do Azure com JMS

Este artigo aplica-se a:✅ Versão 4.19.0 ✅ Versão 5.19.0

Este artigo descreve como usar o Barramento de Serviço do Azure com a API JMS integrada à estrutura JMS do Spring.

Principais características

Ligação sem palavra-passe

A conexão sem senha usa a autenticação do Microsoft Entra para se conectar aos serviços do Azure sem armazenar credenciais no aplicativo, em seus arquivos de configuração ou em variáveis de ambiente. A autenticação do Microsoft Entra é um mecanismo para se conectar ao Barramento de Serviço do Azure usando identidades definidas na ID do Microsoft Entra. Com a autenticação do Microsoft Entra, você pode gerenciar o Service Bus e outros serviços da Microsoft em um local central, o que simplifica o gerenciamento de permissões.

Como funciona

O Spring Cloud Azure primeiro cria um dos seguintes tipos de credenciais, dependendo da configuração de autenticação do aplicativo:

  • ClientSecretCredential
  • ClientCertificateCredential
  • UsernamePasswordCredential
  • ManagedIdentityCredential

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 obter mais informações, consulte de autenticação do Spring Cloud Azure .

Configuração de dependência

Adicione as seguintes dependências se quiser migrar seu aplicativo Spring JMS para usar o Barramento de Serviço do Azure.

<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 cadeia de conexão do Barramento de Serviço do Azure, para quando você deseja fornecer a cadeia de conexã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 a configuração automática JMS do Service Bus deve ser habilitada. O valor padrão é true.
spring.jms.servicebus.idle-timeout A duração do tempo limite ocioso da conexão que indica por quanto tempo o cliente espera que o Service Bus mantenha uma conexão ativa quando nenhuma mensagem é entregue. O valor padrão é 2m.
spring.jms.servicebushabilitado para .passwordless Se deseja habilitar sem senha para o JMS do Barramento de Serviço do Azure. O valor padrão é false.
spring.jms.servicebus.pricing-tier A camada de preço do Barramento de Serviço do Azure. Os valores suportados são premium e padrão. A camada Premium usa o Java Message Service (JMS) 2.0, enquanto a camada padrão usa o JMS 1.1 para interagir com o Barramento de Serviço do Azure.
spring.jms.servicebus.listener.reply-pub-subdomínio 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-conexões O número máximo de conexões agrupadas.
spring.jms.servicebus.pool.max-sessões-por-conexão 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 fallback para a opção de pré-busca 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 JMS do Barramento de Serviço do Azure usando sem senha

Configure as seguintes propriedades no arquivo application.yml:

spring:
  jms:
    servicebus:
      namespace: ${AZURE_SERVICEBUS_NAMESPACE}
      pricing-tier: ${PRICING_TIER}
      passwordless-enabled: true

Importante

O JMS do Barramento de Serviço do Azure dá suporte ao uso da ID do Microsoft Entra para autorizar solicitações a recursos do Barramento de Serviço. Com a ID do Microsoft Entra, certifique-se de que atribuiu a função de de Proprietário de Dados do Barramento de Serviço do Azure à conta do Microsoft Entra que está a utilizar atualmente. Para obter mais informações, consulte Atribuir funções do Azure usando o portal do Azure.

Conectar-se ao Barramento de Serviço do Azure com JMS usando a Identidade Gerenciada

  1. Para usar a identidade gerenciada, habilite a identidade gerenciada para seu serviço e atribua a função Azure Service Bus Data Owner. Para obter mais informações, consulte Autenticar uma identidade gerenciada com a ID do Microsoft Entra para acessar os recursos do Barramento de Serviço do Azure.

  2. 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: true
    

    Importante

    Se você estiver usando a identidade gerenciada atribuída pelo usuário, também precisará adicionar a propriedade spring.cloud.azure.credential.client-id com sua ID de cliente de identidade gerenciada atribuída pelo usuário.

Conectar-se ao Azure Service Bus JMS usando a cadeia de conexão

Adicione as seguintes propriedades e pronto.

spring:
  jms:
    servicebus:
      connection-string: ${AZURE_SERVICEBUS_CONNECTION_STRING}
      pricing-tier: ${PRICING_TIER}

Conexões

O Spring Cloud Azure fornece as seguintes três opções de Fábrica de Conexões para se conectar ao JMS do Barramento de Serviço do Azure:

  • JmsPoolConnectionFactory: defina spring.jms.servicebus.pool.enabled=true ou deixe as configurações de pool e cache desdefinidas para usar o valor padrão. Esta fábrica mantém um pool de conexões com opções personalizáveis como spring.jms.servicebus.pool.max-connections. As definições adicionais de configuração do pool - prefixadas com - são detalhadas na seção de configuração do . Essa configuração melhora o desempenho aproveitando o recurso de balanceamento de carga do Barramento de Serviço do Azure, distribuindo o tráfego entre vários pontos de extremidade.

  • CachingConnectionFactory: Defina spring.jms.cache.enabled=true e deixe spring.jms.servicebus.pool.enabled desativar. Esta fábrica reutiliza uma única conexão para todas as chamadas para JmsTemplate, reduzindo a sobrecarga de criação de conexão, o que é ideal para cenários de baixo tráfego. No entanto, esse modo não aproveita a capacidade de balanceamento de carga do Barramento de Serviço do Azure.

  • ServiceBusJmsConnectionFactory: Defina spring.jms.servicebus.pool.enabled=false e spring.jms.cache.enabled=false para usar ServiceBusJmsConnectionFactory diretamente, sem pool ou cache. Neste modo, cada chamada para JmsTemplate cria uma nova ligação, que pode consumir muitos recursos e ser menos eficiente.

Para um desempenho e distribuição de carga ideais, recomendamos o uso de JmsPoolConnectionFactory definindo spring.jms.servicebus.pool.enabled=true. Evite envolver um JmsPoolConnectionFactory com um CachingConnectionFactory ou ServiceBusJmsConnectionFactory porque isso pode negar os benefícios do pool e pode resultar na manutenção de conexões inativas depois que eles forem removidos do pool.

Observação

A partir do Spring Cloud Azure 5.19.0, o ConnectionFactory padrão foi atualizado para JmsPoolConnectionFactory usar melhor o balanceamento de carga do servidor do Service Bus. Se preferir continuar usando o CachingConnectionFactory para armazenar em cache Session e MessageProducer, defina spring.jms.cache.enabled como true.

Amostras

Para obter mais informações, consulte o repositório azure-spring-boot-samples no GitHub.