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. Microsoft Entra hitelesítés a Azure Service Bus a Microsoft Entra ID definiált identitások használatával történő csatlakozás mechanizmusa. A Microsoft Entra hitelesítéssel központi helyen kezelheti Service Bus és más Microsoft-szolgáltatások, ami leegyszerűsíti az engedélykezelést.

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ó: Felhő-Azure hitelesítés.

Függőség 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 A Azure Service Bus kapcsolati karakterlánc, amikor közvetlenül meg szeretné adni a kapcsolati karakterlánc.
spring.jms.servicebus.topic-client-id A JMS-ügyfél azonosítója. Csak a topicJmsListenerContainerFactory babhoz 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 A Azure Service Bus árszint. 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 babhoz működik.
spring.jms.servicebus.listener.phase A tároló indításának és leállításának fázisa.
spring.jms.servicebus.listener.reply-qos-settings A válasz küldésekor használandó QosSettings konfigurálja.
spring.jms.servicebus.listener.subscription-durable Egy érték, amely jelzi, hogy az előfizetés tartós legyen-e. Csak a topicJmsListenerContainerFactory babhoz 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 babhoz működik.
spring.jms.servicebus.pool.block-if-full Egy érték, amely jelzi, hogy blokkolni kell-e a kapcsolat kérését, és a készlet megtelt. Állítsa be hamisra, hogy inkább JMSException dobjon.
spring.jms.servicebus.pool.block-if-full-timeout A kivételt megelőző blokkolási időszak, ha a készlet még mindig megtelt.
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 tétlen időtúllépése.
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 készletezett munkamenetek maximális száma.
spring.jms.servicebus.pool.time-between-expiration-check Az inaktív kapcsolat kiürítési szálának futtatásai közötti alvás ideje. Negatív esetben nem fut tétlen kapcsolat kilakoltatási szála.
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 A tartalék érték ebben a Service Bus névtérben az előbetöltési beállításhoz. Az alapértelmezett érték a 0.
spring.jms.servicebus.prefetch-policy.durable-topic-prefetch A tartós témakör előzetes verziójának 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őzetes verziójának száma. Az alapértelmezett érték a 0.
spring.jms.servicebus.prefetch-policy.queue-prefetch Az üzenetsor előkezelésének 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. A Microsoft Entra ID győződjön meg arról, hogy a Azure Service Bus Adattulajdonos szerepkört az éppen használt Microsoft Entra-fiókhoz rendelte. További információ: Assign Azure szerepkörök a Azure portálon.

Csatlakozás Azure Service Bus JMS-sel felügyelt identitás használatával

  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ó: A felügyelt identitás hitelesítése Microsoft Entra ID Azure Service Bus erőforrások 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.

Csatlakozás Azure Service Bus JMS-hez kapcsolati karakterlánc

Adja hozzá a következő tulajdonságokat, és jó választás.

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 kapcsolatok felügyelt identitásai nem életképesek. 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. További készletkonfigurációs beállítások – előtaggal – spring.jms.servicebus.pool. a Konfiguráció szakaszban találhatók. 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.2.0 és 6.2.0) alapján használható:

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