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
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
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.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
: Nastavtespring.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 jespring.jms.servicebus.pool.max-connections
. Další nastavení konfigurace fondu s předponouspring.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
: Nastavtespring.jms.cache.enabled=true
a ponechejtespring.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
: Nastavtespring.jms.servicebus.pool.enabled=false
aspring.jms.cache.enabled=false
tak, aby seServiceBusJmsConnectionFactory
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.