Azure Service Bus használata JMS-sel

Ez a cikk bemutatja, hogyan használható Azure Service Bus a Spring JMS-keretrendszerbe integrált JMS API-val.

Alapvető funkciók

Jelszó nélküli kapcsolat

A jelszó nélküli kapcsolat Microsoft Entra hitelesítést használ a Azure szolgáltatásokhoz való csatlakozáshoz anélkül, hogy hitelesítő adatokat tárolnál az alkalmazásban, annak konfigurációs fájljaiban vagy környezeti változókban. A Microsoft Entra-hitelesítés egy olyan mechanizmus, amellyel a Microsoft Entra ID-ban meghatározott identitások használatával lehet csatlakozni az Azure Service Bushoz. A Microsoft Entra-hitelesítéssel a Service Bust és más Microsoft-szolgáltatásokat egy központi helyről kezelheti, ami leegyszerűsíti az engedélyek kezelését.

Hogyan működik?

A Spring Cloud Azure először a következő típusú hitelesítő adatok egyikét hozza létre az alkalmazáshitelesítés konfigurációjától függően:

  • ClientSecretCredential
  • ClientCertificateCredential
  • UsernamePasswordCredential
  • ManagedIdentityCredential

Ha az ilyen típusú hitelesítő adatok egyike sem található, a hitelesítő adatok DefaultTokenCredential keresztüli lánca az alkalmazástulajdonságokból, környezeti változókból, felügyelt identitásokból vagy azonosítókból származó hitelesítő adatok lekérésére szolgál. További információkért lásd: Spring Cloud Azure-hitelesítés.

Függőségek beállítása

Adja hozzá a következő függőségeket, ha át szeretné telepíteni a Spring JMS-alkalmazást a Azure Service Bus használatára.

<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-starter-servicebus-jms</artifactId>
</dependency>

Konfiguráció

Az alábbi táblázat a Spring JMS-támogatás használatakor konfigurálható tulajdonságokat ismerteti:

Ingatlan Leírás
spring.jms.servicebus.connection-string Az Azure Service Bus kapcsolati karakterlánca, ha közvetlenül szeretné megadni a kapcsolati karakterláncot.
spring.jms.servicebus.topic-client-id A JMS-ügyfél azonosítója. Csak a topicJmsListenerContainerFactory beanhoz működik.
spring.jms.servicebus.enabled Egy érték, amely jelzi, hogy engedélyezni szeretné-e Service Bus JMS automatikus konfigurálását. Az alapértelmezett érték a true.
spring.jms.servicebus.idle-timeout A kapcsolat tétlenségének időtúllépési időtartama, amely azt jelzi, hogy az ügyfél mennyi ideig várja, Service Bus életben tartsa a kapcsolatot, amikor nem érkeznek üzenetek. Az alapértelmezett érték a 2m.
spring.jms.servicebus.passwordless-enabled A jelszó nélküli Azure Service Bus JMS engedélyezése. Az alapértelmezett érték a false.
spring.jms.servicebus.pricing-tier Az Azure Service Bus díjszabási szintje. A támogatott értékek premium és standard. A prémium szint a Java Message Service (JMS) 2.0-s verziójával, míg a standard szint a JMS 1.1-et használja a Azure Service Bus való kommunikációhoz.
spring.jms.servicebus.listener.reply-pub-sub-domain Egy érték, amely jelzi, hogy a válasz céltípusa témakör-e. Csak a topicJmsListenerContainerFactory bean esetén működik.
spring.jms.servicebus.listener.phase Az a fázis, amelyben ezt a konténert el kell indítani és le kell állítani.
spring.jms.servicebus.listener.reply-qos-settings Beállítja a válasz küldésekor használandó QosSettings elemet.
spring.jms.servicebus.listener.subscription-durable Egy érték, amely jelzi, hogy az előfizetés tartós legyen-e. Csak a topicJmsListenerContainerFactory bean esetén működik. Az alapértelmezett érték a true.
spring.jms.servicebus.listener.subscription-shared Egy érték, amely azt jelzi, hogy meg szeretné-e osztani az előfizetést. Csak a topicJmsListenerContainerFactory bean esetében működik.
spring.jms.servicebus.pool.block-if-full Egy érték, amely azt jelzi, hogy blokkolni kell-e, ha kapcsolatot kérnek, és a kapcsolatkészlet megtelt. Állítsa false értékre, hogy helyette JMSException legyen kiváltva.
spring.jms.servicebus.pool.block-if-full-timeout A blokkolási időszak a kivétel dobása előtt, ha a pool még mindig tele van.
spring.jms.servicebus.pool.enabled Egy érték, amely azt jelzi, hogy létre kell-e hozni egy JmsPoolConnectionFactory a normál ConnectionFactoryhelyett.
spring.jms.servicebus.pool.idle-timeout A kapcsolatkészlet üresjárati időkorlátja.
spring.jms.servicebus.pool.max-connections A készletezett kapcsolatok maximális száma.
spring.jms.servicebus.pool.max-sessions-per-connection A készletben lévő kapcsolatonkénti poolozott munkamenetek maximális száma.
spring.jms.servicebus.pool.time-between-expiration-check Az inaktív kapcsolatokat eltávolító szál két futása közötti alvási idő. Negatív érték esetén nem fut az inaktív kapcsolatok eltávolítását végző szál.
spring.jms.servicebus.pool.use-anonymous-producers Egy érték, amely azt jelzi, hogy csak egy névtelen MessageProducer példányt használjon-e. Állítsa be úgy, hogy false hozzon létre egy MessageProducer minden alkalommal, amikor szükség van rá.
spring.jms.servicebus.prefetch-policy.all Az előbeolvasási beállítás alapértelmezett értéke ebben a Service Bus-névtérben. Az alapértelmezett érték a 0.
spring.jms.servicebus.prefetch-policy.durable-topic-prefetch A tartós témakörhöz tartozó előlehívások száma. Az alapértelmezett érték a 0.
spring.jms.servicebus.prefetch-policy.queue-browser-prefetch A várólista-böngésző előbetöltéseinek száma. Az alapértelmezett érték a 0.
spring.jms.servicebus.prefetch-policy.queue-prefetch Az üzenetsor előzetes lekéréseinek száma. Az alapértelmezett érték a 0.
spring.jms.servicebus.prefetch-policy.topic-prefetch A témakör előzetes verziójának száma. Az alapértelmezett érték a 0.

Jegyzet

A Spring JMS általános konfigurációja rövid ideig nem jelenik meg.

További információ: Spring JMS-dokumentum.

Alapszintű használat

Csatlakozás Azure Service Bus JMS-hez jelszó nélküli használatával

Konfigurálja a következő tulajdonságokat a application.yml fájlban:

spring:
  jms:
    servicebus:
      namespace: ${AZURE_SERVICEBUS_NAMESPACE}
      pricing-tier: ${PRICING_TIER}
      passwordless-enabled: true

Fontos

Azure Service Bus JMS támogatja a Microsoft Entra ID használatát Service Bus erőforrásokra irányuló kérelmek engedélyezéséhez. Microsoft Entra ID használata esetén győződjön meg arról, hogy a Azure Service Bus Data Owner szerepkört az Ön által jelenleg használt Microsoft Entra-fiókhoz rendelte. További információért lásd: Azure-szerepkörök kiosztása az Azure Portal használatával.

Kapcsolódás az Azure Service Bushoz JMS használatával, felügyelt identitással

  1. A felügyelt identitás használatához engedélyezze a szolgáltatás felügyelt identitását, és rendelje hozzá a Azure Service Bus Data Owner szerepkört. További információkért lásd: Felügyelt identitás hitelesítése a Microsoft Entra ID-val az Azure Service Bus erőforrásainak eléréséhez.

  2. Konfigurálja a következő tulajdonságokat a application.yml fájlban:

    spring:
      cloud:
        azure:
          credential:
            managed-identity-enabled: true
      jms:
        servicebus:
          namespace: ${AZURE_SERVICEBUS_NAMESPACE}
          pricing-tier: ${PRICING_TIER}
          passwordless-enabled: true
    

    Fontos

    Ha felhasználó által hozzárendelt felügyelt identitást használ, a spring.cloud.azure.credential.client-id tulajdonságot is hozzá kell adnia a felhasználó által hozzárendelt felügyelt identitás ügyfélazonosítójához.

Kapcsolódás az Azure Service Bus JMS-hez kapcsolati sztring használatával

Adja hozzá a következő tulajdonságokat, és készen is van.

spring:
  jms:
    servicebus:
      connection-string: ${AZURE_SERVICEBUS_CONNECTION_STRING}
      pricing-tier: ${PRICING_TIER}

Jegyzet

Microsoft a legbiztonságosabb hitelesítési folyamat használatát javasolja. Az ebben az eljárásban ismertetett hitelesítési folyamat, például adatbázisok, gyorsítótárak, üzenetkezelés vagy AI-szolgáltatások esetében, nagyon nagy megbízhatóságot igényel az alkalmazásban, és más folyamatokban nem jelenik meg kockázattal. Ezt a folyamatot csak akkor használja, ha a biztonságosabb lehetőségek, például a jelszó nélküli vagy kulcs nélküli kapcsolatokhoz használható felügyelt identitások, nem megvalósíthatók. A helyi gépi műveletekhez előnyben részesítse a jelszó nélküli vagy kulcs nélküli kapcsolatok felhasználói identitásait.

Kapcsolatok

A Spring Cloud Azure a következő három Connection Factory-lehetőséget biztosítja a Azure Service Bus JMS-hez való csatlakozáshoz:

  • JmsPoolConnectionFactory: Ez a gyár egy olyan kapcsolatkészletet tart fenn, amely testreszabható lehetőségeket kínál, például spring.jms.servicebus.pool.max-connections. A Konfiguráció szakasz további, spring.jms.servicebus.pool. előtaggal ellátott poolkonfigurációs beállításokat ismertet. Ez a beállítás Azure Service Bus terheléselosztási funkciójával javítja a teljesítményt, és több végpont között osztja el a forgalmat.

  • CachingConnectionFactory: Ez a gyár egyetlen kapcsolatot használ újra az összes híváshoz JmsTemplate, csökkentve a kapcsolatlétrehozás többletterhelését, ami ideális az alacsony forgalmú forgatókönyvekhez. Ez a mód azonban nem használja Azure Service Bus terheléselosztási képességét.

  • ServiceBusJmsConnectionFactory: Ebben a módban minden hívás JmsTemplate új kapcsolatot hoz létre, amely erőforrás-igényes és kevésbé hatékony lehet.

Ha mind a három osztály létezik az osztályúton, melyiket használja? Az alábbi táblázat a konfigurációs tulajdonságok alapján (a Spring Cloud Azure 7.1.0-s és 6.2.0-s verzió óta) használt adatokat ismerteti:

spring.jms.servicebus.pool.enabled spring.jms.cache.enabled Feladó ConnectionFactory Figyelőtároló ConnectionFactory
nincs beállítva nincs beállítva CachingConnectionFactory ServiceBusJmsConnectionFactory
nincs beállítva true CachingConnectionFactory CachingConnectionFactory
nincs beállítva false ServiceBusJmsConnectionFactory ServiceBusJmsConnectionFactory
true nincs beállítva JmsPoolConnectionFactory JmsPoolConnectionFactory
true true CachingConnectionFactory CachingConnectionFactory
true false JmsPoolConnectionFactory JmsPoolConnectionFactory
false nincs beállítva CachingConnectionFactory ServiceBusJmsConnectionFactory
false true CachingConnectionFactory CachingConnectionFactory
false false ServiceBusJmsConnectionFactory ServiceBusJmsConnectionFactory

Jegyzet

Az alábbi táblázat az alapértelmezett ConnectionFactory mutatja, ha spring.jms.servicebus.pool.enabled és spring.jms.cache.enabled nincs beállítva a különböző Spring Cloud-Azure verziókhoz:

Spring Cloud Azure verziója Feladó ConnectionFactory Figyelőtároló ConnectionFactory
>= 6.2.0 vagy >= 7.1.0 CachingConnectionFactory ServiceBusJmsConnectionFactory
6.1.0 és 7.0.0 ServiceBusJmsConnectionFactory ServiceBusJmsConnectionFactory
<= 6.1.0 JmsPoolConnectionFactory JmsPoolConnectionFactory

Minták

További információt a GitHub azure-spring-boot-samples adattárában talál.