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 topics
do .
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
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 tiver um, consulte Usar o portal do Azure para criar um namespace do Service Bus e uma fila ou Usar o portal do Azure para criar um tópico do Service Bus e assinaturas para o tópico.
Um aplicativo Spring Boot. Se você 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, em seguida, selecione Java versão 8 ou superior.
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 como4.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.
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 Adicionar
@EnableJms
para habilitar o suporte para pontos de extremidade anotados do ouvinte JMS. UseJmsTemplate
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
DefaultAzureCredential
o , 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?
Inicie a aplicação. Você deve ver
Sending message
eHello 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.