Oharra
Baimena behar duzu orria atzitzeko. Direktorioetan saioa has dezakezu edo haiek alda ditzakezu.
Baimena behar duzu orria atzitzeko. Direktorioak alda ditzakezu.
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 |
La cadena de conexión de Azure Service Bus, para cuando quiera proporcionar la cadena de conexión directamente. |
spring.jms.servicebus.topic-client-id |
Identificador de cliente de JMS. Solo funciona para el topicJmsListenerContainerFactory bean. |
spring.jms.servicebus.enabled |
Un valor que indica si se habilita la configuración automática de JMS de Service Bus. 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 que Service Bus mantenga activa una conexión cuando no se entregan mensajes. El valor predeterminado es 2m. |
spring.jms.servicebus.passwordless-enabled |
Si se debe habilitar la autenticación 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 |
La fase en la que debe iniciarse y detenerse 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 debe bloquear la solicitud de conexión cuando el grupo está lleno. Establézcalo en `false` para lanzar un JMSException en su lugar. |
spring.jms.servicebus.pool.block-if-full-timeout |
El período de bloqueo antes de lanzar una excepción si el pool 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 |
Tiempo de espera entre ejecuciones del subproceso de expulsión de conexiones inactivas. Si es negativo, no se ejecuta ningún subproceso para desalojar conexiones inactivas. |
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 para la opción de captura previa en este espacio de nombres de Service Bus. El valor predeterminado es 0. |
spring.jms.servicebus.prefetch-policy.durable-topic-prefetch |
Número de captura previa del tema duradero. El valor predeterminado es 0. |
spring.jms.servicebus.prefetch-policy.queue-browser-prefetch |
Número de captura previa del explorador de colas. El valor predeterminado es 0. |
spring.jms.servicebus.prefetch-policy.queue-prefetch |
Número de captura previa del explorador de colas. 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
Conectarse a Azure Service Bus JMS 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 haber asignado el rol Azure Service Bus Data Owner a la cuenta de Microsoft Entra con la que está trabajando 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 Autenticar 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 una identidad administrada asignada por el usuario, también debe agregar la propiedad
spring.cloud.azure.credential.client-idcon el identificador de cliente de su identidad administrada asignada por el usuario.
Conexión a Azure Service Bus JMS mediante cadena de conexión
Agregue las siguientes propiedades y listo.
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: Esta factoría mantiene un pool de conexiones con opciones configurables comospring.jms.servicebus.pool.max-connections. Se detallan más opciones de configuración de la agrupación, con el prefijospring.jms.servicebus.pool., en la sección Configuración. 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.1.0 y 6.2.0):
spring.jms.servicebus.pool.enabled |
spring.jms.cache.enabled |
Remitente ConnectionFactory |
Contenedor de agentes 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 de agentes de escucha ConnectionFactory |
|---|---|---|
| >= 6.2.0 o >= 7.1.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.