Uso de JMS en Spring para acceder a Azure Service Bus
En este tutorial se muestra cómo usar Spring Boot Starter para JMS de Azure Service Bus para enviar y recibir mensajes de Service Bus queues
y topics
.
Azure proporciona una plataforma de mensajería asincrónica denominada Azure Service Bus ("Service Bus") que se basa en el estándar Advanced Message Queueing Protocol 1.0 (AMQP 1.0). Puede usar Service Bus en toda la gama de plataformas de Azure compatibles.
Spring Boot Starter para JMS de Azure Service Bus proporciona integración de Spring JMS con Service Bus.
En el vídeo siguiente se describe cómo integrar aplicaciones de Spring JMS con Azure Service Bus mediante JMS 2.0.
En este tutorial, se incluyen dos métodos de autenticación: autenticación de Microsoft Entra y autenticación de firmas de acceso compartido (SAS). La pestaña Sin contraseña muestra la autenticación de Microsoft Entra y la pestaña Cadena de conexión muestra la autenticación SAS.
La autenticación de Microsoft Entra es un mecanismo para conectarse a JMS de Azure Service Bus mediante identidades definidas en microsoft Entra ID. Con la autenticación de Microsoft Entra, puede administrar las identidades de los usuarios de la base de datos y otros servicios de Microsoft en una ubicación central, lo que simplifica la administración de los permisos.
La autenticación de SAS usa el cadena de conexión del espacio de nombres de Azure Service Bus para el acceso delegado a JMS de Service Bus. Si decide usar firmas de acceso compartido como credenciales, debe administrar el cadena de conexión por su cuenta.
Requisitos previos
Una suscripción a Azure: cree una cuenta gratuita.
Java Development Kit (JDK) versión 8 o posterior.
Apache Maven, versión 3.2 o posterior.
Una cola o tema para Azure Service Bus. Si no tiene una, consulte Uso de Azure Portal para crear un espacio de nombres de Service Bus y una cola o Usar Azure Portal para crear un tema y suscripciones de Service Bus al tema.
Una aplicación de Spring Boot. Si no tiene ninguna, cree un proyecto de Maven con Spring Initializr. Asegúrese de seleccionar Proyecto de Maven y, en Dependencias, agregue la dependencia de Spring Web y, a continuación, seleccione Java versión 8 o posterior.
Importante
Se requiere Spring Boot versión 2.5 o posterior para completar los pasos de este tutorial.
Envío y recepción de mensajes de Azure Service Bus
Con una cola o tema para Azure Service Bus, puede enviar y recibir mensajes mediante JMS de Spring Cloud Azure Service Bus.
Para instalar el módulo Spring Cloud Azure Service Bus JMS Starter, agregue las siguientes dependencias al archivo pom.xml :
La lista de materiales (BOM) de Azure de Spring Cloud:
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>5.13.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
Nota:
Si usa Spring Boot 2.x, asegúrese de establecer la
spring-cloud-azure-dependencies
versión4.19.0
en . Esta lista de materiales (BOM) debe configurarse en la<dependencyManagement>
sección del archivo pom.xml . Esto garantiza que todas las dependencias de Azure de Spring Cloud usen la misma versión. Para obtener más información sobre la versión que se usa para esta lista de materiales, consulte La versión de Spring Cloud que se debe usar en Azure.Artefacto de inicio de JMS JMS de Spring Cloud Azure Service Bus:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-servicebus-jms</artifactId> </dependency>
Incorporación del código de la aplicación
Siga estos pasos para configurar la aplicación para usar una cola o un tema de Service Bus para enviar y recibir mensajes.
Configure las credenciales de Service Bus agregando las siguientes propiedades al archivo application.properties .
Nota:
JMS de Azure Service Bus admite el uso de Microsoft Entra ID para autorizar solicitudes a recursos de Service Bus. Con microsoft Entra ID, puede usar el control de acceso basado en rol de Azure (RBAC de Azure) para conceder permisos a una entidad de seguridad, que puede ser un usuario o una entidad de servicio de aplicación.
Importante
Antes de empezar, asegúrese de que ha asignado el rol Propietario de datos de Azure Service Bus a la cuenta de Microsoft Entra que está usando actualmente. Para más información, consulte Asignación de roles de Azure mediante Azure Portal.
spring.jms.servicebus.namespace=<ServiceBusNamespace> spring.jms.servicebus.pricing-tier=<ServiceBusPricingTier> spring.jms.servicebus.passwordless-enabled=true spring.jms.listener.receive-timeout=60000
En la tabla siguiente se describen los campos de la configuración:
Campo Descripción spring.jms.servicebus.namespace
Especifique el espacio de nombres que obtuvo en la instancia de servicio de Service Bus desde Azure Portal. spring.jms.servicebus.pricing-tier
Especifique el plan de tarifa del bus de servicio. Los valores admitidos son premium y estándar. El nivel Premium usa Java Message Service (JMS) 2.0, mientras que el nivel estándar usa JMS 1.1 para interactuar con Azure Service Bus. spring.jms.servicebus.passwordless-enabled
Especifique si se va a usar sin contraseña. spring.jms.listener.receive-timeout
De forma predeterminada, el valor de tiempo de espera de recepción es 1000. Se recomienda establecerlo en 60000 Agregue
@EnableJms
para habilitar la compatibilidad con los puntos de conexión anotados del agente de escucha de JMS. UseJmsTemplate
para enviar mensajes y@JmsListener
para recibir mensajes, como se muestra en el ejemplo siguiente: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); } }
Reemplace
<QueueName>
por el nombre de la cola configurado en el espacio de nombres de Service Bus.Sugerencia
En este tutorial, no hay ninguna operación de autenticación en las configuraciones ni en el código. Sin embargo, la conexión a los servicios de Azure requiere autenticación. Para completar la autenticación, debe usar Azure Identity. Spring Cloud Azure usa
DefaultAzureCredential
, que la biblioteca de identidades de Azure proporciona para ayudarle a obtener credenciales sin cambios en el código.DefaultAzureCredential
admite varios métodos de autenticación y determina qué método se usa en tiempo de ejecución. Este enfoque permite a la aplicación usar diferentes métodos de autenticación en distintos entornos (como entornos locales y de producción) sin implementar código específico del entorno. Para obtener más información, vea DefaultAzureCredential.Para completar la autenticación en entornos de desarrollo local, puede usar la CLI de Azure, Visual Studio Code, PowerShell u otros métodos. Para más información, consulte Autenticación de Azure en entornos de desarrollo de Java. Para completar la autenticación en entornos de hospedaje de Azure, se recomienda usar la identidad administrada asignada por el usuario. Para obtener más información, consulte ¿Qué son las identidades administradas para recursos de Azure?
Inicie la aplicación. Debería ver
Sending message
yHello World
publicar en el registro de aplicaciones, como se muestra en la salida de ejemplo siguiente:Sending message Message received: Hello World
Implementación en Azure Spring Apps
Ahora que tiene la aplicación Spring Boot que se ejecuta localmente, es el momento de moverla a producción. Azure Spring Apps facilita la implementación de aplicaciones de Spring Boot en Azure sin cambios en el código. El servicio administra la infraestructura de las aplicaciones de Spring, con el fin de que los desarrolladores puedan centrarse en el código. Azure Spring Apps proporciona administración del ciclo de vida mediante el uso de una supervisión y un diagnóstico completos, administración de la configuración, detección de servicios, integración de CI/CD e implementaciones azul-verde, entre otros. Para implementar la aplicación en Azure Spring Apps, consulte Implementación de la primera aplicación en Azure Spring Apps.
Pasos siguientes
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente las Cuestiones de GitHub como mecanismo de retroalimentación para el contenido y lo sustituiremos por un nuevo sistema de retroalimentación. Para más información, consulta:Enviar y ver comentarios de