Partilhar via


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

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

O Azure fornece uma plataforma de mensagens assíncrona chamada Azure Service Bus ("Service Bus"), que se baseia no padrão Advanced Message Queueing Protocol 1.0 ("AMQP 1.0"). Você pode usar o Service Bus em toda a variedade de plataformas do Azure com suporte.

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

O vídeo a seguir descreve como integrar aplicativos Spring JMS com o Azure Service Bus 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 Azure Service Bus JMS usando identidades definidas na ID do Microsoft Entra. Com a autenticação do Microsoft Entra, você pode gerenciar identidades de usuário de banco de dados e outros serviços da Microsoft em um local 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 sozinho.

Pré-requisitos

Importante

O Spring Boot versão 2.5 ou superior é necessário para concluir as etapas neste 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 Spring Cloud Azure Service Bus JMS.

Para instalar o módulo JMS Starter do Spring Cloud Azure Service Bus, adicione as seguintes dependências ao seu 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.19.0</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

    Nota

    Se estiver a utilizar o Spring Boot 2.x, certifique-se de que define a spring-cloud-azure-dependencies versão como 4.19.0. Esta lista de materiais (BOM) deve ser configurada na <dependencyManagement> seção do seu arquivo de 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 essa lista técnica, consulte Qual versão do Spring Cloud Azure devo usar.

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

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

Codificar a aplicação

Use as etapas a seguir para configurar seu aplicativo para usar uma fila ou tópico do Service Bus para enviar e receber mensagens.

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

    Nota

    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 o Microsoft Entra ID, você pode usar o controle de acesso baseado em função do Azure (Azure RBAC) 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, certifique-se de que atribuiu a função 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 Utilizar o portal do Azure para atribuir funções 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 em sua instância de serviço do Service Bus no portal do Azure.
    spring.jms.servicebus.pricing-tier Especifique a camada de preço do barramento de serviço. Os valores suportados são premium e standard. 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.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 @JmsListener 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 sua própria fila configurada no seu espaço de nomes do Service Bus.

    Gorjeta

    Neste tutorial, não há operações de autenticação nas configurações ou no código. No entanto, conectar-se aos 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 Identidades do Azure fornece para ajudá-lo a obter credenciais sem alterações de código.

    DefaultAzureCredential Suporta vários métodos de autenticação e determina qual método usar em tempo de execução. Essa abordagem permite que seu aplicativo use diferentes métodos de autenticação 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 o uso da identidade gerenciada atribuída pelo usuário. Para obter mais informações, consulte O que são identidades gerenciadas para recursos do Azure?

  3. Inicie a aplicação. 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. O Azure Spring Apps facilita a implantação de aplicativos Spring Boot no Azure sem alterações de código. O serviço gerencia a infraestrutura dos aplicativos Spring para que os desenvolvedores possam se concentrar em seu código. O Azure Spring Apps fornece gerenciamento do ciclo de vida usando monitoramento e diagnóstico abrangentes, gerenciamento de configuração, descoberta de serviços, integração de CI/CD, implantações azul-verde e muito mais. Para implantar seu aplicativo no Azure Spring Apps, consulte Implantar seu primeiro aplicativo no Azure Spring Apps.

Próximos passos