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

Esse tutorial, demonstra como usar o iniciador do Spring Boot para JMS do Barramento de Serviço do Azure para enviar e receber mensagens do Barramento de Serviço queues e topics.

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 todas as plataformas do Azure compatíveis.

O iniciador do Spring Boot para o JMS do Barramento de Serviço do Azure oferece integração do Spring JMS com o Barramento de Serviço.

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


Neste tutorial, incluiremos dois métodos de autenticação: autenticação do 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 conexão com o JMS do Barramento de Serviço do Azure usando identidades definidas no Microsoft Entra ID. 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

É necessário o Spring Boot versão 2.5 ou superior para concluir as etapas neste tutorial.

Enviar e receber mensagens do Barramento de Serviços 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 Barramento de Serviço do Azure do Spring Cloud.

Para instalar o módulo do JMS do Barramento de Serviço do Iniciador do Azure Spring Cloud, adicione as seguintes dependências ao arquivo pom.xml:

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

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.azure.spring</groupId>
          <artifactId>spring-cloud-azure-dependencies</artifactId>
          <version>5.17.1</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.19.0. Esta lista de materiais (BOM) deve ser configurada na <dependencyManagement> seção do arquivo pom.xml. Isso garante que todas as dependências do Azure Spring Cloud estejam usando a mesma versão. Para obter mais informações sobre a versão usada para esta BOM, consulte Qual versão do Azure Spring Cloud devo usar.

  • O artefato JMS do Barramento de Serviço do Iniciador do Azure Spring Cloud:

    <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 Barramento de Serviço 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 o Microsoft Entra ID, você pode usar o RBAC (controle de acesso baseado em função) do Azure para conceder permissões a uma entidade de segurança, que pode ser um usuário ou entidade de serviço de aplicativo.

    Importante

    Antes de começar, verifique se você atribuiu a função de Proprietário de Dados do Barramento de Serviço do Azure à conta do Microsoft Entra que você 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 seguinte descreve os campos da configuração:

    Campo Descrição
    spring.jms.servicebus.namespace Especifique o namespace que você obteve em sua instância de serviço do Barramento de Serviço no portal do Azure.
    spring.jms.servicebus.pricing-tier Especifique o tipo de preço de seu barramento de serviço. Os valores com suporte são premium e padrão. A camada Premium usa o Java Message Service (JMS) 2.0, enquanto a camada standard usa o JMS 1.1 para interagir com o Barramento de Serviços 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 terminais anotados do ouvinte JMS. Use JmsTemplate para enviar mensagens e @JmsListener para receber mensagens, 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 Azure Spring Cloud usa DefaultAzureCredential, que a biblioteca Azure Identity fornece para ajudá-lo a obter credenciais sem nenhuma alteração de código.

    DefaultAzureCredential dá suporte a vários métodos de autenticação e determina qual método usar no runtime. Essa abordagem habilita seu aplicativo a usar diferentes métodos de autenticação em diferentes ambientes, 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 locais, 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 o uso de 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 postados no log do aplicativo, conforme mostrado na saída do seguinte exemplo:

    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 produção. Os Aplicativos Spring do Azure facilita a implantação de aplicativos Spring Boot no Azure sem nenhuma alteração no 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