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
Uma assinatura do Azure – crie uma gratuitamente.
Java Development Kit (JDK) versão 8 ou superior.
Apache Maven, versão 3.2 ou superior.
Uma fila ou tópico para o Barramento de Serviço do Azure. Se você não possui uma, consulte Usar o portal do Azure para criar um namespace do Barramento de Serviço e uma fila ou Usar o portal do Azure para criar um tópico do Barramento de Serviço e assinaturas para o tópico.
Um aplicativo Spring Boot. Caso não tiver um, crie um projeto Maven com o Spring Initializr. Certifique-se de selecionar Projeto Maven e, em Dependências, adicione a dependência do Spring Web e selecione Java versão 8 ou superior.
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.18.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 como4.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.
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 Adicionar
@EnableJms
para habilitar o suporte para terminais anotados do ouvinte JMS. UseJmsTemplate
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?
Inicie o aplicativo. Você deve ver
Sending message
eHello 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.