Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se describe cómo usar Azure Service Bus con la API de JMS integrada en el marco de Spring JMS.
Características principales
Conexión sin contraseña
La conexión sin contraseña usa Microsoft Entra autenticación para conectarse a servicios Azure sin almacenar credenciales en la aplicación, sus archivos de configuración o en variables de entorno. Microsoft Entra autenticación es un mecanismo para conectarse a Azure Service Bus mediante identidades definidas en Microsoft Entra ID. Con la autenticación Microsoft Entra, puede administrar Service Bus y otros servicios Microsoft en una ubicación central, lo que simplifica la administración de permisos.
Cómo funciona
Spring Cloud Azure primero compila uno de los siguientes tipos de credenciales en función de la configuración de autenticación de la aplicación:
ClientSecretCredentialClientCertificateCredentialUsernamePasswordCredentialManagedIdentityCredential
Si no se encuentra ninguno de estos tipos de credenciales, la cadena de credenciales a través de DefaultTokenCredential se usa para obtener credenciales de las propiedades de la aplicación, las variables de entorno, la identidad administrada o los IDE. Para obtener más información, consulte Spring Cloud Azure authentication.
Configuración de dependencias
Agregue las siguientes dependencias si desea migrar la aplicación de Spring JMS para usar Azure Service Bus.
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-servicebus-jms</artifactId>
</dependency>
Configuración
En la tabla siguiente se describen las propiedades configurables al usar la compatibilidad con Spring JMS:
| Propiedad | Descripción |
|---|---|
spring.jms.servicebus.connection-string |
El Azure Service Bus cadena de conexión, para cuando desee proporcionar directamente el cadena de conexión. |
spring.jms.servicebus.topic-client-id |
Identificador de cliente de JMS. Solo funciona para el topicJmsListenerContainerFactory bean. |
spring.jms.servicebus.enabled |
Valor que indica si se va a habilitar Service Bus configuración automática de JMS. El valor predeterminado es true. |
spring.jms.servicebus.idle-timeout |
La duración del tiempo de espera de inactividad de la conexión que indica cuánto tiempo espera el cliente Service Bus mantener activa una conexión cuando no se entrega ningún mensaje. El valor predeterminado es 2m. |
spring.jms.servicebus.passwordless-enabled |
Si se habilita sin contraseña para Azure Service Bus JMS. El valor predeterminado es false. |
spring.jms.servicebus.pricing-tier |
El plan de tarifa Azure Service Bus. Los valores admitidos son premium y standard. 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.listener.reply-pub-sub-domain |
Valor que indica si el tipo de destino de respuesta es un tema. Solo funciona para el topicJmsListenerContainerFactory bean. |
spring.jms.servicebus.listener.phase |
Fase en la que se debe iniciar y detener este contenedor. |
spring.jms.servicebus.listener.reply-qos-settings |
Configura el QosSettings que se va a usar al enviar una respuesta. |
spring.jms.servicebus.listener.subscription-durable |
Valor que indica si se debe hacer que la suscripción sea duradera. Solo funciona para el topicJmsListenerContainerFactory bean. El valor predeterminado es true. |
spring.jms.servicebus.listener.subscription-shared |
Valor que indica si se va a compartir la suscripción. Solo funciona para el topicJmsListenerContainerFactory bean. |
spring.jms.servicebus.pool.block-if-full |
Valor que indica si se va a bloquear cuando se solicita una conexión y el grupo está lleno. Establézcalo en false para iniciar un JMSException en su lugar. |
spring.jms.servicebus.pool.block-if-full-timeout |
El período de bloqueo antes de iniciar una excepción si el grupo sigue lleno. |
spring.jms.servicebus.pool.enabled |
Valor que indica si se debe crear un JmsPoolConnectionFactory, en lugar de un ConnectionFactorynormal. |
spring.jms.servicebus.pool.idle-timeout |
Tiempo de espera de inactividad del grupo de conexiones. |
spring.jms.servicebus.pool.max-connections |
Número máximo de conexiones agrupadas. |
spring.jms.servicebus.pool.max-sessions-per-connection |
Número máximo de sesiones agrupadas por conexión en el grupo. |
spring.jms.servicebus.pool.time-between-expiration-check |
El tiempo de suspensión entre las ejecuciones del subproceso de expulsión de conexión inactiva. Cuando es negativo, no se ejecuta ningún subproceso de expulsión de conexión inactiva. |
spring.jms.servicebus.pool.use-anonymous-producers |
Valor que indica si se va a usar solo una instancia de MessageProducer anónima. Establézcalo en false para crear una MessageProducer cada vez que se requiera una. |
spring.jms.servicebus.prefetch-policy.all |
Valor de reserva de la opción de captura previa en este espacio de nombres Service Bus. El valor predeterminado es 0. |
spring.jms.servicebus.prefetch-policy.durable-topic-prefetch |
Número de captura previa para el tema duradero. El valor predeterminado es 0. |
spring.jms.servicebus.prefetch-policy.queue-browser-prefetch |
Número de captura previa para el explorador de colas. El valor predeterminado es 0. |
spring.jms.servicebus.prefetch-policy.queue-prefetch |
Número de captura previa para la cola. El valor predeterminado es 0. |
spring.jms.servicebus.prefetch-policy.topic-prefetch |
Número de captura previa del tema. El valor predeterminado es 0. |
Nota
Se omite la configuración general de Spring JMS para abreviar.
Para obtener más información, vea documento de Spring JMS.
Uso básico
Conexión a Azure Service Bus JMS con contraseña sin contraseña
Configure las siguientes propiedades en el archivo application.yml:
spring:
jms:
servicebus:
namespace: ${AZURE_SERVICEBUS_NAMESPACE}
pricing-tier: ${PRICING_TIER}
passwordless-enabled: true
Importante
Azure Service Bus JMS admite el uso de Microsoft Entra ID para autorizar solicitudes a recursos de Service Bus. Con Microsoft Entra ID, asegúrese de que ha asignado el rol Azure Service Bus Propietario de datos a la cuenta de Microsoft Entra que está usando actualmente. Para obtener más información, consulte Assign Azure roles mediante el portal de Azure.
Conexión a Azure Service Bus con JMS mediante identidad administrada
Para usar la identidad administrada, habilite la identidad administrada para el servicio y asigne el rol de
Azure Service Bus Data Owner. Para obtener más información, consulte Authenticate una identidad administrada con Microsoft Entra ID para acceder a los recursos de Azure Service Bus.Configure las siguientes propiedades en el archivo application.yml:
spring: cloud: azure: credential: managed-identity-enabled: true jms: servicebus: namespace: ${AZURE_SERVICEBUS_NAMESPACE} pricing-tier: ${PRICING_TIER} passwordless-enabled: trueImportante
Si usa la identidad administrada asignada por el usuario, también debe agregar la propiedad
spring.cloud.azure.credential.client-idcon el identificador de cliente de identidad administrada asignada por el usuario.
Conexión a Azure Service Bus JMS mediante cadena de conexión
Agregue las siguientes propiedades y es bueno ir.
spring:
jms:
servicebus:
connection-string: ${AZURE_SERVICEBUS_CONNECTION_STRING}
pricing-tier: ${PRICING_TIER}
Nota
Microsoft recomienda usar el flujo de autenticación más seguro disponible. El flujo de autenticación descrito en este procedimiento, como para bases de datos, memorias caché, mensajería o servicios de inteligencia artificial, requiere un grado de confianza muy alto en la aplicación y conlleva riesgos que no están presentes en otros flujos. Use este flujo solo cuando las opciones más seguras, como las identidades administradas para conexiones sin contraseña o sin claves, no sean viables. En el caso de las operaciones de máquina local, prefiera identidades de usuario para conexiones sin contraseña o sin claves.
Conexiones
Spring Cloud Azure proporciona las tres opciones siguientes de Connection Factory para conectarse a Azure Service Bus JMS:
JmsPoolConnectionFactory: este generador mantiene un grupo de conexiones con opciones personalizables comospring.jms.servicebus.pool.max-connections. En la secciónspring.jms.servicebus.pool.se detallan más opciones de configuración de grupo ( con prefijo con ). Esta configuración mejora el rendimiento mediante la funcionalidad de equilibrio de carga de Azure Service Bus, lo que distribuye el tráfico entre varios puntos de conexión.CachingConnectionFactory: esta fábrica reutiliza una única conexión para todas las llamadas aJmsTemplate, lo que reduce la sobrecarga de creación de conexiones, lo que es ideal para escenarios de tráfico bajo. Sin embargo, este modo no usa la funcionalidad de equilibrio de carga de Azure Service Bus.ServiceBusJmsConnectionFactory: en este modo, cada llamada aJmsTemplatecrea una nueva conexión, que puede ser de uso intensivo de recursos y menos eficaz.
Cuando existen las tres clases en la ruta de clase, ¿cuál se usa? En la tabla siguiente se describe qué se usa en función de las propiedades de configuración (desde Spring Cloud Azure 7.2.0 y 6.2.0):
spring.jms.servicebus.pool.enabled |
spring.jms.cache.enabled |
Remitente ConnectionFactory |
Contenedor del agente de escucha ConnectionFactory |
|---|---|---|---|
| sin establecer | sin establecer | CachingConnectionFactory |
ServiceBusJmsConnectionFactory |
| sin establecer | true |
CachingConnectionFactory |
CachingConnectionFactory |
| sin establecer | false |
ServiceBusJmsConnectionFactory |
ServiceBusJmsConnectionFactory |
true |
sin establecer | JmsPoolConnectionFactory |
JmsPoolConnectionFactory |
true |
true |
CachingConnectionFactory |
CachingConnectionFactory |
true |
false |
JmsPoolConnectionFactory |
JmsPoolConnectionFactory |
false |
sin establecer | CachingConnectionFactory |
ServiceBusJmsConnectionFactory |
false |
true |
CachingConnectionFactory |
CachingConnectionFactory |
false |
false |
ServiceBusJmsConnectionFactory |
ServiceBusJmsConnectionFactory |
Nota
En la tabla siguiente se muestra el ConnectionFactory predeterminado cuando tanto spring.jms.servicebus.pool.enabled como spring.jms.cache.enabled no están establecidos para diferentes versiones de Spring Cloud Azure:
| Versión de Spring Cloud Azure | Remitente ConnectionFactory |
Contenedor del agente de escucha ConnectionFactory |
|---|---|---|
| >= 6.2.0 o >= 7.2.0 | CachingConnectionFactory |
ServiceBusJmsConnectionFactory |
| 6.1.0 y 7.0.0 | ServiceBusJmsConnectionFactory |
ServiceBusJmsConnectionFactory |
| <= 6.1.0 | JmsPoolConnectionFactory |
JmsPoolConnectionFactory |
Muestras
Para obtener más información, consulte el repositorio azure-spring-boot-samples en GitHub.