Azure Service Bus gebruiken met JMS

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

Een verbinding zonder wachtwoord maakt gebruik van Microsoft Entra-authenticatie om verbinding te maken met Azure-services zonder aanmeldingsgegevens op te slaan in de toepassing, de configuratiebestanden ervan of 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, waardoor het beheer van machtigingen wordt vereenvoudigd.

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 authentication voor meer informatie.

Afhankelijkheid instellen

Voeg de volgende afhankelijkheden toe als u uw Spring JMS-toepassing wilt migreren om Azure Service Bus te gebruiken.

<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 met de topicJmsListenerContainerFactory bean.
spring.jms.servicebus.enabled Een waarde die aangeeft of Service Bus JMS-autoconfiguratie ingeschakeld wordt. 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 Azure Service Bus prijscategorie. 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-sub-domain 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 Configureert de QosSettings die moet 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 er moet worden geblokkeerd wanneer een verbinding wordt aangevraagd en de pool vol is. Stel het in op false om in plaats daarvan een JMSException te genereren.
spring.jms.servicebus.pool.block-if-full-timeout De blokkeringsperiode voordat een uitzondering wordt opgeworpen als de pool nog steeds 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 De time-out bij inactiviteit van de verbindingspool.
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 wachttijd tussen twee uitvoeringen van de thread voor het verwijderen van inactieve verbindingen. Wanneer deze waarde negatief is, draait er geen thread voor het opruimen van inactieve verbindingen.
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

De algemene configuratie van Spring JMS wordt hier uit beknoptheid weggelaten.

Zie Spring JMS-documentvoor meer informatie.

Basisgebruik

Verbinding maken met Azure Service Bus JMS zonder 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 rol Azure Service Bus Gegevenseigenaar hebt toegewezen aan het Microsoft Entra account dat u momenteel gebruikt. Zie Azure-rollen toewijzen met behulp van de Azure-portal voor meer informatie.

Verbinding maken met Azure Service Bus via JMS met een beheerde identiteit

  1. Als u de beheerde identiteit wilt gebruiken, schakelt u de beheerde identiteit voor uw service in en wijst u de rol Azure Service Bus Data Owner toe. Zie Een beheerde identiteit verifiëren met Microsoft Entra ID om toegang te krijgen tot Azure Service Bus-resources voor 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}

Notitie

Microsoft raadt aan de veiligste verificatiestroom te gebruiken die beschikbaar is. De verificatiestroom die in deze procedure wordt beschreven, zoals voor databases, caches, berichten of AI-services, vereist een zeer hoge mate van vertrouwen in de toepassing en brengt risico's met zich mee die niet aanwezig zijn in andere stromen. Gebruik deze stroom alleen wanneer veiligere opties, zoals beheerde identiteiten voor wachtwoordloze of sleutelloze verbindingen, niet haalbaar zijn. Voor bewerkingen van lokale machines geeft u de voorkeur aan gebruikersidentiteiten voor verbindingen zonder wachtwoord of sleutelloze verbindingen.

Verbindingen

Spring Cloud Azure biedt de volgende drie verbindingsfactory-opties voor het maken van verbinding met Azure Service Bus JMS:

  • JmsPoolConnectionFactory: Deze fabriek onderhoudt een verbindingsgroep met aanpasbare opties zoals spring.jms.servicebus.pool.max-connections. Meer 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: Deze fabriek gebruikt één verbinding voor alle aanroepen, JmsTemplatewaardoor de overhead van het maken van verbindingen wordt verminderd, wat ideaal is voor scenario's met weinig verkeer. In deze modus wordt echter geen gebruikgemaakt van de taakverdelingsmogelijkheid van Azure Service Bus.

  • ServiceBusJmsConnectionFactory: In deze modus maakt elke aanroep van JmsTemplate een nieuwe verbinding, wat veel resources kan vergen en minder efficiënt kan zijn.

Wanneer alle drie de klassen bestaan in het klaspad, welke wordt gebruikt? In de volgende tabel wordt beschreven welke wordt gebruikt op basis van configuratie-eigenschappen (sinds Spring Cloud Azure 7.1.0 en 6.2.0):

spring.jms.servicebus.pool.enabled spring.jms.cache.enabled Afzender ConnectionFactory Luistercontainer ConnectionFactory
niet ingesteld niet ingesteld CachingConnectionFactory ServiceBusJmsConnectionFactory
niet ingesteld true CachingConnectionFactory CachingConnectionFactory
niet ingesteld false ServiceBusJmsConnectionFactory ServiceBusJmsConnectionFactory
true niet ingesteld JmsPoolConnectionFactory JmsPoolConnectionFactory
true true CachingConnectionFactory CachingConnectionFactory
true false JmsPoolConnectionFactory JmsPoolConnectionFactory
false niet ingesteld CachingConnectionFactory ServiceBusJmsConnectionFactory
false true CachingConnectionFactory CachingConnectionFactory
false false ServiceBusJmsConnectionFactory ServiceBusJmsConnectionFactory

Notitie

In de volgende tabel ziet u de standaard-ConnectionFactory wanneer zowel spring.jms.servicebus.pool.enabled als spring.jms.cache.enabled niet zijn ingesteld voor verschillende Versies van Spring Cloud Azure:

Spring Cloud Azure versie Afzender ConnectionFactory Listenercontainer ConnectionFactory
>= 6.2.0 of >= 7.1.0 CachingConnectionFactory ServiceBusJmsConnectionFactory
6.1.0 en 7.0.0 ServiceBusJmsConnectionFactory ServiceBusJmsConnectionFactory
<= 6.1.0 JmsPoolConnectionFactory JmsPoolConnectionFactory

Voorbeelden

Zie de opslagplaats azure-spring-boot-samples op GitHub voor meer informatie.