Sdílet prostřednictvím


Použití služby Azure Service Bus s JMS

Tento článek se vztahuje na:✅ verze 4.19.0 ✅ verze 5.19.0

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

Základní funkce

Připojení bez hesla

Připojení bez hesla používá ověřování Microsoft Entra pro připojení ke službám Azure bez uložení přihlašovacích údajů v aplikaci, konfiguračních souborech nebo v proměnných prostředí. Ověřování Microsoft Entra je mechanismus pro připojení ke službě Azure Service Bus pomocí identit definovaných v Microsoft Entra ID. Pomocí ověřování Microsoft Entra můžete spravovat Service Bus a další služby Microsoftu 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 tématu ověřování Spring Cloud Azure.

Nastavení závislostí

Pokud chcete migrovat aplikaci Spring JMS pro použití služby 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 služby Azure Service Bus, pro který chcete připojovací řetězec zadat přímo.
spring.jms.servicebus.topic-client-id ID klienta JMS. Funguje jenom pro topicJmsListenerContainerFactory bean.
spring.jms.servicebus.enabled Hodnota, která označuje, jestli se má povolit automatická konfigurace JMS služby Service Bus. Výchozí hodnota je true.
spring.jms.servicebusvypršení časového limitu nečinnosti Doba časového limitu nečinnosti připojení, která udává, jak dlouho klient očekává, že service Bus bude udržovat připojení aktivní, když se nedoručí žádné zprávy. Výchozí hodnota je 2m.
spring.jms.servicebusbez hesla Jestli chcete povolit bez hesla pro Azure Service Bus JMS. Výchozí hodnota je false.
spring.jms.servicebus.pricing-tier Cenová úroveň služby 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 se službou Azure Service Bus.
spring.jms.servicebus.listener.reply-pub-sub-domain Hodnota, která označuje, zda cílový typ odpovědi je téma. 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 Nakonfiguruje 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 jenom pro topicJmsListenerContainerFactory bean.
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-připojení Maximální počet připojení ve fondu.
spring.jms.servicebus.pool.max-sessions-per-connection Maximální počet relací ve fondu na připojení ve fondu.
spring.jms.servicebus.pool.time-between-expiration-check Doba spánku mezi běhy nečinného připojení vyřazovací vlákno. Pokud je záporné, vlákno vyřazení nečinných připojení se spustí.
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ů služby 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ého načtení fronty. Výchozí hodnota je 0.
spring.jms.servicebus.prefetch-policy.topic-prefetch Počet předběžného načtení tématu. Výchozí hodnota je 0.

Poznámka

Obecná konfigurace Spring JMS není zkrácena.

Další informace naleznete v tématu Spring JMS Document.

Základní využití

Připojení ke službě 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. S ID Microsoft Entra se ujistěte, že jste přiřadili roli vlastníka dat služby Azure Service Bus účtu Microsoft Entra, který aktuálně používáte. Další informace najdete v tématu Přiřazení rolí Azure pomocí webu Azure Portal.

Připojení ke službě Azure Service Bus pomocí JMS s využitím spravované identity

  1. Pokud chcete spravovanou identitu použít, 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í ID Microsoft Entra 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í ke službě Azure Service Bus JMS pomocí připojovacího řetězce

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

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

Konexe

Spring Cloud Azure poskytuje následující tři možnosti služby Connection Factory pro připojení ke službě Azure Service Bus JMS:

  • JmsPoolConnectionFactory: Nastavte spring.jms.servicebus.pool.enabled=true nebo ponechte nastavení fondu i mezipaměti nenastavené tak, aby používaly výchozí hodnotu. Tato továrna udržuje fond připojení s přizpůsobitelnými možnostmi, jako je spring.jms.servicebus.pool.max-connections. Další nastavení konfigurace fondu s předponou spring.jms.servicebus.pool. jsou podrobně popsána v části Konfigurace. Toto nastavení zvyšuje výkon díky využití funkce vyrovnávání zatížení služby Azure Service Bus a distribuci provozu napříč několika koncovými body.

  • CachingConnectionFactory: Nastavte spring.jms.cache.enabled=true a ponechejte spring.jms.servicebus.pool.enabled nenastavené. Tato továrna opakovaně používá jedno připojení pro všechna volání JmsTemplate, což snižuje režii při vytváření připojení, což je ideální pro scénáře s nízkým provozem. Tento režim ale nevyužívá funkci vyrovnávání zatížení služby Azure Service Bus.

  • ServiceBusJmsConnectionFactory: Nastavte spring.jms.servicebus.pool.enabled=false a spring.jms.cache.enabled=false tak, aby se ServiceBusJmsConnectionFactory používaly přímo bez sdružování nebo ukládání do mezipaměti. 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í.

Pro optimální výkon a distribuci zatížení doporučujeme použít JmsPoolConnectionFactory nastavením spring.jms.servicebus.pool.enabled=true. Vyhněte se zabalení JmsPoolConnectionFactory s CachingConnectionFactory nebo ServiceBusJmsConnectionFactory, protože to může negovat výhody sdružování a může vést k tomu, že po vyřazení z fondu budou neaktivní připojení.

Poznámka

Počínaje verzí Spring Cloud Azure 5.19.0 se výchozí ConnectionFactory aktualizovaly na JmsPoolConnectionFactory, aby lépe používaly vyrovnávání zatížení serveru Service Bus. Pokud chcete pokračovat v používání CachingConnectionFactory pro ukládání do mezipaměti Session i MessageProducer, nastavte spring.jms.cache.enabled na true.

Vzorky

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