Usar o JMS no Spring para acessar o Barramento de Serviço do Azure

Este tutorial demonstra como usar o Spring Boot Starter para JMS do Barramento de Serviço do Azure para enviar e receber mensagens do Service Bus queues e topicsdo .

O Azure fornece uma plataforma de mensagens assíncrona chamada Barramento de Serviço do Azure ("Barramento de Serviço") baseada no padrão Advanced Message Queueing Protocol 1.0 ("AMQP 1.0"). Você pode usar o Barramento de Serviço em toda a gama de plataformas do Azure com suporte.

O Spring Boot Starter para JMS do Barramento de Serviço do Azure fornece integração do Spring JMS com o Service Bus.

O vídeo a seguir descreve como integrar aplicativos Spring JMS com o Barramento de Serviço do Azure usando JMS 2.0.


Neste tutorial, incluímos dois métodos de autenticação: autenticação Microsoft Entra e autenticação SAS (Assinaturas de Acesso Compartilhado). A guia Sem senha mostra a autenticação do Microsoft Entra e a guia Cadeia de conexão mostra a autenticação SAS.

A autenticação do Microsoft Entra é um mecanismo para se conectar ao JMS do Barramento de Serviço do Azure usando identidades definidas na ID do Microsoft Entra. Com a autenticação do Microsoft Entra, você pode gerenciar as identidades de usuários do banco de dados e outros serviços da Microsoft em uma só localização central, o que simplifica o gerenciamento de permissões.

A autenticação SAS usa a cadeia de conexão do namespace do Barramento de Serviço do Azure para o acesso delegado ao JMS do Barramento de Serviço. Se você optar por usar Assinaturas de Acesso Compartilhado como credenciais, precisará gerenciar a cadeia de conexão por conta própria.

Pré-requisitos

Importante

O Spring Boot versão 2.5 ou superior é necessário para concluir as etapas deste tutorial.

Enviar e receber mensagens do Barramento de Serviço do Azure

Com uma fila ou tópico para o Barramento de Serviço do Azure, você pode enviar e receber mensagens usando o JMS do Spring Cloud Azure Service Bus.

Para instalar o módulo JMS Starter do Spring Cloud Azure Service Bus, adicione as seguintes dependências ao arquivo pom.xml :

  • A lista de materiais do Spring Cloud Azure (BOM):

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.azure.spring</groupId>
          <artifactId>spring-cloud-azure-dependencies</artifactId>
          <version>5.11.0</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

    Observação

    Se você estiver usando o Spring Boot 2.x, certifique-se de definir a spring-cloud-azure-dependencies versão como 4.17.0. Esta lista de materiais (BOM) deve ser configurada <dependencyManagement> na seção do arquivo pom.xml . Isso garante que todas as dependências do Spring Cloud Azure estejam usando a mesma versão. Para obter mais informações sobre a versão usada para esta BOM, consulte Qual versão do Spring Cloud Azure devo usar.

  • O artefato inicial JMS do Spring Cloud Azure Service Bus:

    <dependency>
      <groupId>com.azure.spring</groupId>
      <artifactId>spring-cloud-azure-starter-servicebus-jms</artifactId>
    </dependency>
    

Codificar o aplicativo

Use as etapas a seguir para configurar seu aplicativo para usar uma fila ou tópico do Barramento de Serviço para enviar e receber mensagens.

  1. Configure as credenciais do Service Bus adicionando as seguintes propriedades ao arquivo application.properties .

    Observação

    O JMS do Barramento de Serviço do Azure dá suporte ao uso da ID do Microsoft Entra para autorizar solicitações para recursos do Barramento de Serviço. Com a ID do Microsoft Entra, você pode usar o controle de acesso baseado em função do Azure (RBAC do Azure) para conceder permissões a uma entidade de segurança, que pode ser um usuário ou uma entidade de serviço de aplicativo.

    Importante

    Antes de começar, verifique se você atribuiu a função Proprietário de Dados do Barramento de Serviço do Azure à conta do Microsoft Entra que está usando no momento. Para obter mais informações, confira Atribuir funções do Azure usando o portal do Azure.

    spring.jms.servicebus.namespace=<ServiceBusNamespace>
    spring.jms.servicebus.pricing-tier=<ServiceBusPricingTier>
    spring.jms.servicebus.passwordless-enabled=true
    spring.jms.listener.receive-timeout=60000
    

    A tabela a seguir descreve os campos na configuração:

    Campo Descrição
    spring.jms.servicebus.namespace Especifique o namespace obtido na instância de serviço do Service Bus no portal do Azure.
    spring.jms.servicebus.pricing-tier Especifique o tipo de preço de seu barramento de serviço. Os valores suportados são premium e standard. A camada Premium usa o JMS (Java Message Service) 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.passwordless-enabled Especifique se deseja usar sem senha.
    spring.jms.listener.receive-timeout Por padrão, o valor de tempo limite de recebimento é 1000. Recomendamos que você o defina como 60000
  2. Adicionar @EnableJms para habilitar o suporte para pontos de extremidade anotados do ouvinte JMS. Use JmsTemplate para enviar e receber mensagens @JmsListener , conforme mostrado no exemplo a seguir:

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.jms.annotation.EnableJms;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.jms.annotation.JmsListener;
    import org.springframework.jms.core.JmsTemplate;
    
    @SpringBootApplication
    @EnableJms
    public class ServiceBusJMSQueueApplication implements CommandLineRunner {
    
        private static final Logger LOGGER = LoggerFactory.getLogger(ServiceBusJMSQueueApplication.class);
        private static final String QUEUE_NAME = "<QueueName>";
    
        @Autowired
        private JmsTemplate jmsTemplate;
    
        public static void main(String[] args) {
            SpringApplication.run(ServiceBusJMSQueueApplication.class, args);
        }
    
        @Override
        public void run(String... args) {
            LOGGER.info("Sending message");
            jmsTemplate.convertAndSend(QUEUE_NAME, "Hello World");
        }
    
        @JmsListener(destination = QUEUE_NAME, containerFactory = "jmsListenerContainerFactory")
        public void receiveMessage(String message) {
            LOGGER.info("Message received: {}", message);
        }
    
    }
    

    Substitua <QueueName> pelo nome da fila no namespace do Barramento de Serviço.

    Dica

    Neste tutorial, não há operações de autenticação nas configurações ou no código. No entanto, a conexão com os serviços do Azure requer autenticação. Para concluir a autenticação, você precisa usar a Identidade do Azure. O Spring Cloud Azure usa DefaultAzureCredentialo , que a biblioteca de Identidade do Azure fornece para ajudá-lo a obter credenciais sem alterações de código.

    DefaultAzureCredential dá suporte a vários métodos de autenticação e determina qual método usar no runtime. Essa abordagem permite que seu aplicativo use métodos de autenticação diferentes em ambientes diferentes (como ambientes locais e de produção) sem implementar código específico do ambiente. Para obter mais informações, consulte DefaultAzureCredential.

    Para concluir a autenticação em ambientes de desenvolvimento local, você pode usar a CLI do Azure, o Visual Studio Code, o PowerShell ou outros métodos. Para obter mais informações, consulte Autenticação do Azure em ambientes de desenvolvimento Java. Para concluir a autenticação em ambientes de hospedagem do Azure, recomendamos usar a identidade gerenciada atribuída pelo usuário. Para obter mais informações, confira O que são as identidades gerenciadas para recursos do Azure?

  3. Inicie o aplicativo. Você deve ver Sending message e Hello World postar no log do aplicativo, conforme mostrado na saída de exemplo a seguir:

    Sending message
    Message received: Hello World
    

Implantar no Azure Spring Apps

Agora que você tem o aplicativo Spring Boot em execução localmente, é hora de movê-lo para a produção. Os Aplicativos Spring do Azure facilitam a implantação de aplicativos Spring Boot no Azure sem alterações de código. O serviço gerencia a infraestrutura dos aplicativos do Spring para que os desenvolvedores possam se concentrar no código. O Azure Spring Apps fornece gerenciamento de ciclo de vida usando monitoramento e diagnóstico abrangentes, gerenciamento de configuração, descoberta de serviços, integração de CI/CD, implantações em “blue-green” e muito mais. Para implantar seu aplicativo nos Aplicativos Spring do Azure, consulte Implantar seu primeiro aplicativo nos Aplicativos Spring do Azure.

Próximas etapas