Použití Azure Service Bus s JMS

Tento článek popisuje, jak používat Azure Service Bus s rozhraním API JMS integrovaným do architektury Spring JMS.

Základní funkce

Připojení bez hesla

Připojení bez hesla používá k připojení ke službám Azure ověřování Microsoft Entra, aniž by bylo nutné ukládat přihlašovací údaje do aplikace, jejích konfiguračních souborů nebo do proměnných prostředí. Ověřování Microsoft Entra je mechanismus umožňující připojení ke službě Azure Service Bus pomocí identit definovaných v Microsoft Entra ID. S ověřováním Microsoft Entra můžete spravovat Service Bus a další služby Microsoft v centrálním umístění, což zjednodušuje správu oprávnění.

Jak to funguje

Spring Cloud Azure nejprve sestaví jeden z následujících typů přihlašovacích údajů v závislosti na konfiguraci ověřování aplikací:

  • ClientSecretCredential
  • ClientCertificateCredential
  • UsernamePasswordCredential
  • ManagedIdentityCredential

Pokud se nenajde žádný z těchto typů přihlašovacích údajů, použije se řetěz přihlašovacích údajů prostřednictvím DefaultTokenCredential k získání přihlašovacích údajů z vlastností aplikace, proměnných prostředí, spravované identity nebo idEs. Další informace najdete v článku Ověřování ve Spring Cloud Azure.

Nastavení závislostí

Pokud chcete migrovat aplikaci Spring JMS pro použití Azure Service Bus, přidejte následující závislosti.

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

Konfigurace

Následující tabulka popisuje konfigurovatelné vlastnosti při použití podpory Spring JMS:

Vlastnost Popis
spring.jms.servicebus.connection-string Připojovací řetězec ke službě Azure Service Bus, pokud chcete zadat připojovací řetězec přímo.
spring.jms.servicebus.topic-client-id ID klienta JMS. Funguje jen pro komponentu topicJmsListenerContainerFactory.
spring.jms.servicebus.enabled Hodnota, která označuje, jestli se má povolit automatická konfigurace JMS Service Bus. Výchozí hodnota je true.
spring.jms.servicebus.idle-timeout Doba časového limitu nečinnosti spojení, která udává, jak dlouho má Service Bus udržovat spojení aktivní, pokud nejsou doručovány žádné zprávy. Výchozí hodnota je 2m.
spring.jms.servicebus.passwordless-enabled Zda povolit přihlašování bez hesla pro Azure Service Bus JMS. Výchozí hodnota je false.
spring.jms.servicebus.pricing-tier Cenová úroveň Azure Service Bus. Podporované hodnoty jsou premium a standard. Úroveň Premium používá službu Java Message Service (JMS) 2.0, zatímco úroveň Standard používá JMS 1.1 k interakci s Azure Service Bus.
spring.jms.servicebus.listener.reply-pub-sub-domain Hodnota, která udává, zda je typ cíle odpovědi tématem. Funguje jenom pro topicJmsListenerContainerFactory bean.
spring.jms.servicebus.listener.phase Fáze, ve které má být tento kontejner spuštěný a zastavený.
spring.jms.servicebus.listener.reply-qos-settings Nastaví QosSettings, které se má použít při odesílání odpovědi.
spring.jms.servicebus.listener.subscription-durable Hodnota, která určuje, jestli má být předplatné odolné. Funguje jenom pro topicJmsListenerContainerFactory bean. Výchozí hodnota je true.
spring.jms.servicebus.listener.subscription-shared Hodnota, která určuje, jestli se má předplatné sdílet. Funguje pouze pro objekt bean topicJmsListenerContainerFactory.
spring.jms.servicebus.pool.block-if-full Hodnota, která označuje, jestli se má blokovat, když se vyžaduje připojení, a fond je plný. Pokud chcete místo toho vyvolat JMSException, nastavte ji na false.
spring.jms.servicebus.pool.block-if-full-timeout Období blokování před vyvolání výjimky, pokud je fond stále plný.
spring.jms.servicebus.pool.enabled Hodnota, která označuje, zda má být vytvořen JmsPoolConnectionFactory namísto běžného ConnectionFactory.
spring.jms.servicebus.pool.idle-timeout Časový limit nečinnosti fondu připojení.
spring.jms.servicebus.pool.max-connections Maximální počet připojení ve fondu.
spring.jms.servicebus.pool.max-sessions-per-connection Maximální počet sdružených relací na jedno připojení ve fondu.
spring.jms.servicebus.pool.time-between-expiration-check Doba čekání mezi spuštěními vlákna pro vyřazování nečinných připojení. Pokud je záporné, vlákno pro odstraňování nečinných připojení se nespustí.
spring.jms.servicebus.pool.use-anonymous-producers Hodnota, která označuje, zda použít pouze jednu anonymní MessageProducer instanci. Nastavte ho na false a vytvořte jednu MessageProducer pokaždé, když je potřeba.
spring.jms.servicebus.prefetch-policy.all Záložní hodnota pro možnost předběžného načtení v tomto oboru názvů Service Bus. Výchozí hodnota je 0.
spring.jms.servicebus.prefetch-policy.durable-topic-prefetch Počet předběžného načtení pro trvalé téma. Výchozí hodnota je 0.
spring.jms.servicebus.prefetch-policy.queue-browser-prefetch Počet předběžného načtení pro prohlížeč front. Výchozí hodnota je 0.
spring.jms.servicebus.prefetch-policy.queue-prefetch Počet předběžných načtení pro frontu. Výchozí hodnota je 0.
spring.jms.servicebus.prefetch-policy.topic-prefetch Počet přednačtení pro téma. Výchozí hodnota je 0.

Poznámka

Obecná konfigurace Spring JMS je pro stručnost vynechána.

Další informace najdete v dokumentu Spring JMS Document.

Základní využití

Připojení k Azure Service Bus JMS pomocí bez hesla

V souboru application.yml nakonfigurujte následující vlastnosti:

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

Důležitý

Azure Service Bus JMS podporuje použití Microsoft Entra ID k autorizaci požadavků na prostředky služby Service Bus. U Microsoft Entra ID se ujistěte, že jste přiřadili roli vlastníka dat Azure Service Bus k účtu Microsoft Entra, který právě používáte. Další informace najdete v tématu Assignování rolí Azure pomocí portálu Azure.

Připojení k Azure Service Bus pomocí JMS s využitím spravované identity

  1. Pokud chcete použít spravovanou identitu, povolte spravovanou identitu pro vaši službu a přiřaďte Azure Service Bus Data Owner roli. Další informace najdete v tématu Ověření spravované identity pomocí Microsoft Entra ID pro přístup k prostředkům služby Azure Service Bus.

  2. V souboru application.yml nakonfigurujte následující vlastnosti:

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

    Důležitý

    Pokud používáte spravovanou identitu přiřazenou uživatelem, musíte také přidat vlastnost spring.cloud.azure.credential.client-id s ID klienta spravované identity přiřazené uživatelem.

Připojení k Azure Service Bus JMS pomocí připojovací řetězec

Přidejte následující vlastnosti a můžete začít.

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

Poznámka

Microsoft doporučuje používat nejbezpečnější dostupný tok ověřování. Tok ověřování popsaný v tomto postupu, například pro databáze, mezipaměti, zasílání zpráv nebo služby AI, vyžaduje velmi vysoký stupeň důvěryhodnosti v aplikaci a nese rizika, která nejsou přítomna v jiných tocích. Tento postup používejte pouze tehdy, pokud bezpečnější možnosti, jako jsou spravované identity pro připojení bez hesla nebo klíče, nejsou vhodné. V případě místních operací počítačů upřednostňujete identity uživatelů pro připojení bez hesla nebo bez klíčů.

Připojení

Spring Cloud Azure nabízí následující tři možnosti připojení pro připojení k Azure Service Bus JMS:

  • JmsPoolConnectionFactory: Tato továrna spravuje fond připojení s možnostmi přizpůsobení, například spring.jms.servicebus.pool.max-connections. Další nastavení fondu s předponou spring.jms.servicebus.pool. jsou podrobně popsána v části Konfigurace. Toto nastavení zvyšuje výkon pomocí funkce vyrovnávání zatížení Azure Service Bus a distribuuje provoz napříč několika koncovými body.

  • CachingConnectionFactory: Tato továrna využívá jediné připojení pro všechna volání na JmsTemplate, čímž snižuje režii spojenou s vytvářením připojení, takže je ideální pro scénáře s nízkou intenzitou provozu. Tento režim ale nepoužívá funkci vyrovnávání zatížení Azure Service Bus.

  • ServiceBusJmsConnectionFactory: V tomto režimu každé volání JmsTemplate vytvoří nové připojení, které může být náročné na prostředky a méně efektivní.

Pokud v classpath existují všechny tři třídy, která z nich se použije? Následující tabulka popisuje, která se používá na základě vlastností konfigurace (od verze Spring Cloud Azure 7.1.0 a 6.2.0):

spring.jms.servicebus.pool.enabled spring.jms.cache.enabled Odesílatel ConnectionFactory Kontejner naslouchacího procesu ConnectionFactory
nenastaveno nenastaveno CachingConnectionFactory ServiceBusJmsConnectionFactory
nenastaveno true CachingConnectionFactory CachingConnectionFactory
nenastaveno false ServiceBusJmsConnectionFactory ServiceBusJmsConnectionFactory
true nenastaveno JmsPoolConnectionFactory JmsPoolConnectionFactory
true true CachingConnectionFactory CachingConnectionFactory
true false JmsPoolConnectionFactory JmsPoolConnectionFactory
false nenastaveno CachingConnectionFactory ServiceBusJmsConnectionFactory
false true CachingConnectionFactory CachingConnectionFactory
false false ServiceBusJmsConnectionFactory ServiceBusJmsConnectionFactory

Poznámka

Následující tabulka ukazuje výchozí ConnectionFactory, pokud spring.jms.servicebus.pool.enabled i spring.jms.cache.enabled nejsou nastaveny pro různé verze Azure Spring Cloud:

Verze Spring Cloud Azure Odesílatel ConnectionFactory Kontejner naslouchacího procesu ConnectionFactory
>= 6.2.0 nebo >= 7.1.0 CachingConnectionFactory ServiceBusJmsConnectionFactory
6.1.0 a 7.0.0 ServiceBusJmsConnectionFactory ServiceBusJmsConnectionFactory
<= 6,1,0 JmsPoolConnectionFactory JmsPoolConnectionFactory

Vzorky

Další informace najdete v úložišti azure-spring-boot-samples na GitHub.