Använda Azure Service Bus med JMS
Den här artikeln gäller för:✅ version 4.19.0 ✅ version 5.19.0
Den här artikeln beskriver hur du använder Azure Service Bus med JMS-API:et integrerat i Spring JMS-ramverket.
Kärnfunktioner
Lösenordslös anslutning
Lösenordsfri anslutning använder Microsoft Entra-autentisering för att ansluta till Azure-tjänster utan att lagra några autentiseringsuppgifter i programmet, dess konfigurationsfiler eller i miljövariabler. Microsoft Entra-autentisering är en mekanism för att ansluta till Azure Service Bus med hjälp av identiteter som definierats i Microsoft Entra-ID. Med Microsoft Entra-autentisering kan du hantera Service Bus och andra Microsoft-tjänster på en central plats, vilket förenklar behörighetshanteringen.
Så här fungerar det
Spring Cloud Azure skapar först en av följande typer av autentiseringsuppgifter beroende på konfigurationen för programautentisering:
ClientSecretCredential
ClientCertificateCredential
UsernamePasswordCredential
ManagedIdentityCredential
Om ingen av dessa typer av autentiseringsuppgifter hittas används autentiseringskedjan via DefaultTokenCredential
för att hämta autentiseringsuppgifter från programegenskaper, miljövariabler, hanterad identitet eller IDE:er. Mer information finns i Spring Cloud Azure-autentisering.
Beroendekonfiguration
Lägg till följande beroenden om du vill migrera ditt Spring JMS-program för att använda Azure Service Bus.
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-servicebus-jms</artifactId>
</dependency>
Konfiguration
I följande tabell beskrivs de konfigurerbara egenskaperna när du använder Spring JMS-stödet:
Egenskap | Beskrivning |
---|---|
spring.jms.servicebus.connection-string | Anslutningssträngen för Azure Service Bus för när du vill ange anslutningssträngen direkt. |
spring.jms.servicebus.topic-client-id | JMS-klient-ID:t. Fungerar bara för topicJmsListenerContainerFactory böna. |
spring.jms.servicebus.enabled | Ett värde som anger om du vill aktivera automatisk konfiguration av Service Bus JMS. Standardvärdet är true . |
spring.jms.servicebus.idle-timeout | Tidsgränsen för inaktiv anslutning som anger hur länge klienten förväntar sig att Service Bus ska hålla en anslutning vid liv när inga meddelanden levereras. Standardvärdet är 2m . |
spring.jms.servicebus.passwordless-enabled | Om du vill aktivera lösenordslös för Azure Service Bus JMS. Standardvärdet är false . |
spring.jms.servicebus.pricing-tier | Prisnivån för Azure Service Bus. Värden som stöds är Premium och standard. Premium-nivån använder Java Message Service (JMS) 2.0, medan standardnivån använder JMS 1.1 för att interagera med Azure Service Bus. |
spring.jms.servicebus.listener.reply-pub-sub-domain | Ett värde som anger om svarsmålstypen är ett ämne. Fungerar bara för topicJmsListenerContainerFactory böna. |
spring.jms.servicebus.listener.phase | Fasen då containern ska startas och stoppas. |
spring.jms.servicebus.listener.reply-qos-settings | Konfigurerar QosSettings som ska användas när du skickar ett svar. |
spring.jms.servicebus.listener.subscription-durable | Ett värde som anger om prenumerationen ska vara beständig. Fungerar bara för topicJmsListenerContainerFactory böna. Standardvärdet är true . |
spring.jms.servicebus.listener.subscription-shared | Ett värde som anger om prenumerationen ska delas. Fungerar bara för topicJmsListenerContainerFactory böna. |
spring.jms.servicebus.pool.block-if-full | Ett värde som anger om du vill blockera när en anslutning begärs och poolen är full. Ställ in den på false för att kasta en JMSException i stället. |
spring.jms.servicebus.pool.block-if-full-timeout | Blockeringsperioden innan du utlöser ett undantag om poolen fortfarande är full. |
spring.jms.servicebus.pool.enabled | Ett värde som anger om en JmsPoolConnectionFactory ska skapas i stället för en vanlig ConnectionFactory . |
spring.jms.servicebus.pool.idle-timeout | Tidsgränsen för inaktivitet i anslutningspoolen. |
spring.jms.servicebus.pool.max-anslutningar | Det maximala antalet poolanslutningar. |
spring.jms.servicebus.pool.max-sessions-per-connection | Det maximala antalet poolsessioner per anslutning i poolen. |
spring.jms.servicebus.pool.time-between-expiration-check | Tiden att viloläge mellan körningar av den inaktiva anslutningsavlägsningstråden. När det är negativt körs ingen inaktiv anslutningsavlägsningstråd. |
spring.jms.servicebus.pool.use-anonymous-producers | Ett värde som anger om endast en anonym MessageProducer instans ska användas. Ställ in den på false för att skapa en MessageProducer varje gång en krävs. |
spring.jms.servicebus.prefetch-policy.all | Återställningsvärdet för alternativet prefetch i det här Service Bus-namnområdet. Standardvärdet är 0 . |
spring.jms.servicebus.prefetch-policy.durable-topic-prefetch | Antalet prefetch för varaktigt ämne. Standardvärdet är 0 . |
spring.jms.servicebus.prefetch-policy.queue-browser-prefetch | Antalet prefetch för köwebbläsaren. Standardvärdet är 0 . |
spring.jms.servicebus.prefetch-policy.queue-prefetch | Antalet prefetch för kön. Standardvärdet är 0 . |
spring.jms.servicebus.prefetch-policy.topic-prefetch | Antalet prefetch för ämnet. Standardvärdet är 0 . |
Not
Spring JMS allmänna konfiguration utelämnas för kort.
Mer information finns i Spring JMS-dokument.
Grundläggande användning
Ansluta till Azure Service Bus JMS med lösenordsfri
Konfigurera följande egenskaper i din application.yml-fil:
spring:
jms:
servicebus:
namespace: ${AZURE_SERVICEBUS_NAMESPACE}
pricing-tier: ${PRICING_TIER}
passwordless-enabled: true
Viktig
Azure Service Bus JMS stöder användning av Microsoft Entra-ID för att auktorisera begäranden till Service Bus-resurser. Med Microsoft Entra-ID ser du till att du har tilldelat Azure Service Bus-dataägare rollen till det Microsoft Entra-konto som du använder för närvarande. Mer information finns i Tilldela Azure-roller med hjälp av Azure-portalen.
Ansluta till Azure Service Bus med JMS använder hanterad identitet
Om du vill använda den hanterade identiteten aktiverar du den hanterade identiteten för din tjänst och tilldelar rollen
Azure Service Bus Data Owner
. Mer information finns i Autentisera en hanterad identitet med Microsoft Entra-ID för att få åtkomst till Azure Service Bus-resurser.Konfigurera följande egenskaper i din application.yml-fil:
spring: cloud: azure: credential: managed-identity-enabled: true jms: servicebus: namespace: ${AZURE_SERVICEBUS_NAMESPACE} pricing-tier: ${PRICING_TIER} passwordless-enabled: true
Viktig
Om du använder användartilldelad hanterad identitet måste du också lägga till egenskapen
spring.cloud.azure.credential.client-id
med ditt användartilldelade klient-ID för hanterad identitet.
Ansluta till Azure Service Bus JMS med anslutningssträng
Lägg till följande egenskaper så är det dags att gå.
spring:
jms:
servicebus:
connection-string: ${AZURE_SERVICEBUS_CONNECTION_STRING}
pricing-tier: ${PRICING_TIER}
Anslutningar
Spring Cloud Azure tillhandahåller följande tre Anslutning factory-alternativ för anslutning till Azure Service Bus JMS:
JmsPoolConnectionFactory
: Angespring.jms.servicebus.pool.enabled=true
eller lämna både pool- och cacheinställningarna oetade för att använda standardvärdet. Den här fabriken har en anslutningspool med anpassningsbara alternativ somspring.jms.servicebus.pool.max-connections
. Ytterligare konfigurationsinställningar för pooler – prefix medspring.jms.servicebus.pool.
– beskrivs i avsnittet Configuration. Den här konfigurationen förbättrar prestandan genom att utnyttja Azure Service Bus:s belastningsutjämningsfunktion och distribuera trafik över flera slutpunkter.CachingConnectionFactory
: Ställ inspring.jms.cache.enabled=true
och låtspring.jms.servicebus.pool.enabled
vara oetig. Den här fabriken återanvänder en enda anslutning för alla anrop tillJmsTemplate
, vilket minskar kostnaderna för att skapa anslutningar, vilket är idealiskt för scenarier med låg trafik. Det här läget utnyttjar dock inte Azure Service Bus:s belastningsutjämningsfunktion.ServiceBusJmsConnectionFactory
: Angespring.jms.servicebus.pool.enabled=false
ochspring.jms.cache.enabled=false
att användaServiceBusJmsConnectionFactory
direkt, utan poolning eller cachelagring. I det här läget skapar varje anrop tillJmsTemplate
en ny anslutning, som kan vara resursintensiv och mindre effektiv.
För optimal prestanda och belastningsfördelning rekommenderar vi att du använder JmsPoolConnectionFactory
genom att ange spring.jms.servicebus.pool.enabled=true
. Undvik att omsluta en JmsPoolConnectionFactory
med en CachingConnectionFactory
eller ServiceBusJmsConnectionFactory
eftersom detta kan negera poolfördelar och kan leda till inaktiva anslutningar när de har avlägsnats från poolen.
Not
Från och med Spring Cloud Azure 5.19.0 har standard ConnectionFactory
uppdaterats för att JmsPoolConnectionFactory
för bättre användning av Service Bus-serverbelastningsutjämning. Om du föredrar att fortsätta använda CachingConnectionFactory
för cachelagring av både Session
och MessageProducer
anger du spring.jms.cache.enabled
till true
.
Prover
Mer information finns i azure-spring-boot-samples lagringsplats på GitHub.