Delen via


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

  1. 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.

  2. 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: stel spring.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 zoals spring.jms.servicebus.pool.max-connections. Aanvullende configuratie-instellingen voor pools, voorafgegaan door spring.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: stel spring.jms.cache.enabled=true in en laat spring.jms.servicebus.pool.enabled uit. Deze fabriek hergebruikt één verbinding voor alle aanroepen naar JmsTemplate, 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: stel spring.jms.servicebus.pool.enabled=false en spring.jms.cache.enabled=false in om rechtstreeks ServiceBusJmsConnectionFactory te gebruiken, zonder pooling of caching. In deze modus maakt elke aanroep naar JmsTemplate 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=truein 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.