Azure Service Bus gebruiken met JMS
Dit artikel is van toepassing op:✅ versie 4.19.0 ✅ versie 5.19.0
In dit artikel wordt beschreven hoe u Azure Service Bus gebruikt met de JMS-API die is geïntegreerd in het Spring JMS-framework.
Kernfuncties
Verbinding zonder wachtwoord
Verbinding zonder wachtwoord maakt gebruik van Microsoft Entra-verificatie voor het maken van verbinding met Azure-services zonder referenties op te slaan in de toepassing, de configuratiebestanden of in omgevingsvariabelen. Microsoft Entra-verificatie is een mechanisme voor het maken van verbinding met Azure Service Bus met behulp van identiteiten die zijn gedefinieerd in Microsoft Entra-id. Met Microsoft Entra-verificatie kunt u Service Bus en andere Microsoft-services op een centrale locatie beheren, wat het beheer van machtigingen vereenvoudigt.
Hoe het werkt
Spring Cloud Azure bouwt eerst een van de volgende typen referenties, afhankelijk van de configuratie van de toepassingsverificatie:
ClientSecretCredential
ClientCertificateCredential
UsernamePasswordCredential
ManagedIdentityCredential
Als geen van deze typen referenties wordt gevonden, wordt de referentieketen via DefaultTokenCredential
gebruikt om referenties te verkrijgen van toepassingseigenschappen, omgevingsvariabelen, beheerde identiteit of IDE's. Zie Spring Cloud Azure-verificatievoor meer informatie.
Afhankelijkheid instellen
Voeg de volgende afhankelijkheden toe als u uw Spring JMS-toepassing wilt migreren voor het gebruik van Azure Service Bus.
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-servicebus-jms</artifactId>
</dependency>
Configuratie
In de volgende tabel worden de configureerbare eigenschappen beschreven bij het gebruik van spring JMS-ondersteuning:
Eigenschap | Beschrijving |
---|---|
spring.jms.servicebus.connection-string | De Azure Service Bus-verbindingsreeks, voor wanneer u de verbindingsreeks rechtstreeks wilt opgeven. |
spring.jms.servicebus.topic-client-id | De JMS-client-id. Werkt alleen voor de topicJmsListenerContainerFactory bean. |
spring.jms.servicebus.enabled | Een waarde die aangeeft of Service Bus JMS autoconfiguration moet worden ingeschakeld. De standaardwaarde is true . |
spring.jms.servicebus.idle-timeout | De time-outduur voor inactiviteit van de verbinding die aangeeft hoe lang de client verwacht dat Service Bus een verbinding actief houdt wanneer er geen berichten worden bezorgd. De standaardwaarde is 2m . |
spring.jms.servicebus.passwordless enabled | Of u wachtwoordloos wilt inschakelen voor Azure Service Bus JMS. De standaardwaarde is false . |
spring.jms.servicebus.pricing-tier | De Prijscategorie Azure Service Bus. Ondersteunde waarden zijn Premium- en standard-. Premium-laag maakt gebruik van Java Message Service (JMS) 2.0, terwijl de standard-laag JMS 1.1 gebruikt om te communiceren met Azure Service Bus. |
spring.jms.servicebus.listener.reply-pub-subdomein | Een waarde die aangeeft of het type antwoordbestemming een onderwerp is. Werkt alleen voor de topicJmsListenerContainerFactory bean. |
spring.jms.servicebus.listener.phase | De fase waarin deze container moet worden gestart en gestopt. |
spring.jms.servicebus.listener.reply-qos-settings | Hiermee configureert u de QosSettings die moeten worden gebruikt bij het verzenden van een antwoord. |
spring.jms.servicebus.listener.subscription-durable | Een waarde die aangeeft of het abonnement duurzaam moet worden. Werkt alleen voor de topicJmsListenerContainerFactory bean. De standaardwaarde is true . |
spring.jms.servicebus.listener.subscription-shared | Een waarde die aangeeft of het abonnement moet worden gedeeld. Werkt alleen voor de topicJmsListenerContainerFactory bean. |
spring.jms.servicebus.pool.block-if-full | Een waarde die aangeeft of een verbinding moet worden geblokkeerd en de pool vol is. Stel deze in op onwaar om in plaats daarvan een JMSException te gooien. |
spring.jms.servicebus.pool.block-if-full-timeout | De blokkeringsperiode voordat er een uitzondering wordt gegenereerd als de pool nog vol is. |
spring.jms.servicebus.pool.enabled | Een waarde die aangeeft of een JmsPoolConnectionFactory moet worden gemaakt, in plaats van een gewone ConnectionFactory . |
spring.jms.servicebus.pool.idle-timeout | Time-out voor inactiviteit van de verbindingsgroep. |
spring.jms.servicebus.pool.max-connections | Het maximum aantal gegroepeerde verbindingen. |
spring.jms.servicebus.pool.max-sessions-per-connection | Het maximum aantal gegroepeerde sessies per verbinding in de groep. |
spring.jms.servicebus.pool.time-between-expiration-check | De tijd om te slapen tussen uitvoeringen van de niet-actieve verbindingsverwijderingsthread. Als dit negatief is, wordt er geen niet-actieve verbindingsverwijderingsthread uitgevoerd. |
spring.jms.servicebus.pool.use-anonymous-producers | Een waarde die aangeeft of er slechts één anonieme MessageProducer exemplaar moet worden gebruikt. Stel deze in op false om één MessageProducer te maken telkens wanneer er een vereist is. |
spring.jms.servicebus.prefetch-policy.all | De terugvalwaarde voor de prefetch-optie in deze Service Bus-naamruimte. De standaardwaarde is 0 . |
spring.jms.servicebus.prefetch-policy.durable-topic-prefetch | Het aantal prefetch voor duurzaam onderwerp. De standaardwaarde is 0 . |
spring.jms.servicebus.prefetch-policy.queue-browser-prefetch | Het aantal prefetch voor de wachtrijbrowser. De standaardwaarde is 0 . |
spring.jms.servicebus.prefetch-policy.queue-prefetch | Het aantal prefetch voor de wachtrij. De standaardwaarde is 0 . |
spring.jms.servicebus.prefetch-policy.topic-prefetch | Het aantal prefetch voor het onderwerp. De standaardwaarde is 0 . |
Notitie
Algemene spring JMS-configuratie wordt kortweg weggelaten.
Zie Spring JMS-documentvoor meer informatie.
Basisgebruik
Verbinding maken met Azure Service Bus JMS met behulp van een wachtwoord
Configureer de volgende eigenschappen in uw application.yml-bestand:
spring:
jms:
servicebus:
namespace: ${AZURE_SERVICEBUS_NAMESPACE}
pricing-tier: ${PRICING_TIER}
passwordless-enabled: true
Belangrijk
Azure Service Bus JMS ondersteunt het gebruik van Microsoft Entra ID om aanvragen voor Service Bus-resources te autoriseren. Zorg ervoor dat u met Microsoft Entra ID de Azure Service Bus-gegevenseigenaar rol hebt toegewezen aan het Microsoft Entra-account dat u momenteel gebruikt. Zie Azure-rollen toewijzen met behulp van Azure Portalvoor meer informatie.
Verbinding maken met Azure Service Bus met JMS maakt gebruik van beheerde identiteit
Als u de beheerde identiteit wilt gebruiken, schakelt u de beheerde identiteit voor uw service in en wijst u de
Azure Service Bus Data Owner
rol toe. Zie Een beheerde identiteit verifiëren met Microsoft Entra ID voor toegang tot Azure Service Bus-resourcesvoor meer informatie.Configureer de volgende eigenschappen in uw application.yml-bestand:
spring: cloud: azure: credential: managed-identity-enabled: true jms: servicebus: namespace: ${AZURE_SERVICEBUS_NAMESPACE} pricing-tier: ${PRICING_TIER} passwordless-enabled: true
Belangrijk
Als u een door de gebruiker toegewezen beheerde identiteit gebruikt, moet u ook de eigenschap toevoegen
spring.cloud.azure.credential.client-id
met de door de gebruiker toegewezen client-id van de beheerde identiteit.
Verbinding maken met Azure Service Bus JMS met behulp van verbindingsreeks
Voeg de volgende eigenschappen toe en u kunt aan de slag.
spring:
jms:
servicebus:
connection-string: ${AZURE_SERVICEBUS_CONNECTION_STRING}
pricing-tier: ${PRICING_TIER}
Verbindingen
Spring Cloud Azure biedt de volgende drie verbindingsfactory-opties voor het maken van verbinding met Azure Service Bus JMS:
JmsPoolConnectionFactory
: stelspring.jms.servicebus.pool.enabled=true
in of laat de instellingen voor de pool en de cache uitgeschakeld om de standaardwaarde te gebruiken. Deze fabriek onderhoudt een verbindingsgroep met aanpasbare opties zoalsspring.jms.servicebus.pool.max-connections
. Aanvullende configuratie-instellingen voor pools, voorafgegaan doorspring.jms.servicebus.pool.
, worden beschreven in de sectie Configuratie. Deze installatie verbetert de prestaties door gebruik te maken van de taakverdelingsfunctie van Azure Service Bus, waardoor verkeer over meerdere eindpunten wordt verdeeld.CachingConnectionFactory
: stelspring.jms.cache.enabled=true
in en laatspring.jms.servicebus.pool.enabled
uit. Deze fabriek hergebruikt één verbinding voor alle aanroepen naarJmsTemplate
, waardoor de overhead van het maken van verbindingen wordt verminderd, wat ideaal is voor scenario's met weinig verkeer. Deze modus maakt echter geen gebruik van de taakverdelingsfunctie van Azure Service Bus.ServiceBusJmsConnectionFactory
: stelspring.jms.servicebus.pool.enabled=false
enspring.jms.cache.enabled=false
in om rechtstreeksServiceBusJmsConnectionFactory
te gebruiken, zonder pooling of caching. In deze modus maakt elke aanroep naarJmsTemplate
een nieuwe verbinding, die resource-intensief en minder efficiënt kan zijn.
Voor optimale prestaties en belastingverdeling raden we u aan JmsPoolConnectionFactory
te gebruiken door spring.jms.servicebus.pool.enabled=true
in te stellen. Vermijd het verpakken van een JmsPoolConnectionFactory
met een CachingConnectionFactory
of ServiceBusJmsConnectionFactory
, omdat dit de voordelen van pooling kan ontwijken en kan leiden tot inactieve verbindingen nadat ze uit de pool zijn verwijderd.
Notitie
Vanaf Spring Cloud Azure 5.19.0 is de standaard-ConnectionFactory
bijgewerkt naar JmsPoolConnectionFactory
om Service Bus-servertaakverdeling beter te kunnen gebruiken. Als u de CachingConnectionFactory
liever wilt blijven gebruiken voor het opslaan van zowel Session
als MessageProducer
, stelt u spring.jms.cache.enabled
in op true
.
Monsters
Zie de azure-spring-boot-samples opslagplaats op GitHub voor meer informatie.