Korzystanie z usługi Azure Service Bus z programem JMS
Ten artykuł dotyczy:✅ w wersji 4.19.0 ✅ w wersji 5.19.0
W tym artykule opisano sposób używania usługi Azure Service Bus z interfejsem API JMS zintegrowanym z platformą Spring JMS.
Podstawowe funkcje
Połączenie bez hasła
Połączenie bez hasła używa uwierzytelniania Entra firmy Microsoft do nawiązywania połączenia z usługami platformy Azure bez przechowywania poświadczeń w aplikacji, jej plikach konfiguracji lub zmiennych środowiskowych. Uwierzytelnianie Microsoft Entra to mechanizm łączenia się z usługą Azure Service Bus przy użyciu tożsamości zdefiniowanych w identyfikatorze Entra firmy Microsoft. Dzięki uwierzytelnieniu firmy Microsoft Entra można zarządzać usługą Service Bus i innymi usługami firmy Microsoft w centralnej lokalizacji, co upraszcza zarządzanie uprawnieniami.
Jak to działa
Platforma Spring Cloud Azure najpierw tworzy jeden z następujących typów poświadczeń w zależności od konfiguracji uwierzytelniania aplikacji:
ClientSecretCredential
ClientCertificateCredential
UsernamePasswordCredential
ManagedIdentityCredential
Jeśli żaden z tych typów poświadczeń nie zostanie znaleziony, łańcuch poświadczeń za pośrednictwem DefaultTokenCredential
jest używany do uzyskiwania poświadczeń z właściwości aplikacji, zmiennych środowiskowych, tożsamości zarządzanej lub środowisk IDE. Aby uzyskać więcej informacji, zobacz Spring Cloud Azure authentication.
Konfiguracja zależności
Dodaj następujące zależności, jeśli chcesz zmigrować aplikację Spring JMS do korzystania z usługi Azure Service Bus.
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-servicebus-jms</artifactId>
</dependency>
Konfiguracja
W poniższej tabeli opisano konfigurowalne właściwości w przypadku korzystania z obsługi programu Spring JMS:
Własność | Opis |
---|---|
spring.jms.servicebus.connection-string | Parametry połączenia usługi Azure Service Bus, jeśli chcesz podać parametry połączenia bezpośrednio. |
spring.jms.servicebus.topic-client-id | Identyfikator klienta JMS. Działa tylko dla fasoli topicJmsListenerContainerFactory . |
spring.jms.servicebus.enabled | Wartość wskazująca, czy włączyć automatyczną konfigurację usługi Service Bus JMS. Wartość domyślna to true . |
spring.jms.servicebus.idle-timeout | Limit czasu bezczynności połączenia, który wskazuje, jak długo klient oczekuje, że usługa Service Bus będzie utrzymywać połączenie przy życiu, gdy nie są dostarczane żadne komunikaty. Wartość domyślna to 2m . |
spring.jms.servicebus.passwordless-enabled | Czy włączyć bez hasła dla usługi Azure Service Bus JMS. Wartość domyślna to false . |
spring.jms.servicebus.pricing-tier | Warstwa cenowa usługi Azure Service Bus. Obsługiwane wartości to Premium i standard. Warstwa Premium używa usługi Java Message Service (JMS) 2.0, podczas gdy warstwa Standardowa używa programu JMS 1.1 do interakcji z usługą Azure Service Bus. |
spring.jms.servicebus.listener.reply-pub-sub-domain | Wartość wskazująca, czy typ miejsca docelowego odpowiedzi jest tematem. Działa tylko dla fasoli topicJmsListenerContainerFactory . |
spring.jms.servicebus.listener.phase | Faza, w której należy uruchomić i zatrzymać ten kontener. |
spring.jms.servicebus.listener.reply-qos-settings | Konfiguruje QosSettings do użycia podczas wysyłania odpowiedzi. |
spring.jms.servicebus.listener.subscription-durable | Wartość wskazująca, czy subskrypcja ma być trwała. Działa tylko dla fasoli topicJmsListenerContainerFactory . Wartość domyślna to true . |
spring.jms.servicebus.listener.subscription-shared | Wartość wskazująca, czy subskrypcja ma być udostępniona. Działa tylko dla fasoli topicJmsListenerContainerFactory . |
spring.jms.servicebus.pool.block-if-full | Wartość wskazująca, czy zablokować żądanie połączenia, a pula jest pełna. Ustaw wartość false, aby zamiast tego zgłosić JMSException . |
spring.jms.servicebus.pool.block-if-full-timeout | Okres blokowania przed zgłoszeniem wyjątku, jeśli pula jest nadal pełna. |
spring.jms.servicebus.pool.enabled | Wartość wskazująca, czy należy utworzyć JmsPoolConnectionFactory zamiast zwykłego ConnectionFactory . |
spring.jms.servicebus.pool.idle-timeout | Limit czasu bezczynności puli połączeń. |
spring.jms.servicebus.pool.max-connections | Maksymalna liczba połączeń w puli. |
spring.jms.servicebus.pool.max-sessions-per-connection | Maksymalna liczba sesji w puli na połączenie w puli. |
spring.jms.servicebus.pool.time-between-expiration-check | Czas uśpienia między przebiegami wątku eksmisji bezczynności połączenia. Jeśli jest ujemna, wątek eksmisji bezczynności połączenia nie jest uruchamiany. |
spring.jms.servicebus.pool.use-anonymous-producers | Wartość wskazująca, czy używać tylko jednego wystąpienia anonimowego MessageProducer . Ustaw ją na false , aby utworzyć jedną MessageProducer za każdym razem, gdy jest to wymagane. |
spring.jms.servicebus.prefetch-policy.all | Wartość rezerwowa opcji pobierania wstępnego w tej przestrzeni nazw usługi Service Bus. Wartość domyślna to 0 . |
spring.jms.servicebus.prefetch-policy.durable-topic-prefetch | Liczba pobierania wstępnego dla trwałego tematu. Wartość domyślna to 0 . |
spring.jms.servicebus.prefetch-policy.queue-browser-prefetch | Liczba pobierania wstępnego dla przeglądarki kolejek. Wartość domyślna to 0 . |
spring.jms.servicebus.prefetch-policy.queue-prefetch | Liczba pobierania wstępnego dla kolejki. Wartość domyślna to 0 . |
spring.jms.servicebus.prefetch-policy.topic-prefetch | Liczba pobierania wstępnego tematu. Wartość domyślna to 0 . |
Nuta
Ogólna konfiguracja platformy Spring JMS została pominięta na krótko.
Aby uzyskać więcej informacji, zobacz Spring JMS Document.
Podstawowe użycie
Nawiązywanie połączenia z usługą Azure Service Bus JMS przy użyciu bez hasła
Skonfiguruj następujące właściwości w pliku application.yml:
spring:
jms:
servicebus:
namespace: ${AZURE_SERVICEBUS_NAMESPACE}
pricing-tier: ${PRICING_TIER}
passwordless-enabled: true
Ważny
Usługa Azure Service Bus JMS obsługuje używanie identyfikatora Entra firmy Microsoft do autoryzowania żądań do zasobów usługi Service Bus. W przypadku identyfikatora Entra firmy Microsoft upewnij się, że masz przypisaną rolę właściciela danych usługi Azure Service Bus do aktualnie używanego konta Microsoft Entra. Aby uzyskać więcej informacji, zobacz Przypisywanie ról platformy Azure przy użyciu witryny Azure Portal.
Nawiązywanie połączenia z usługą Azure Service Bus przy użyciu usługi JMS przy użyciu tożsamości zarządzanej
Aby użyć tożsamości zarządzanej, włącz tożsamość zarządzaną dla usługi i przypisz rolę
Azure Service Bus Data Owner
. Aby uzyskać więcej informacji, zobacz Uwierzytelnianie tożsamości zarządzanej za pomocą identyfikatora Entra firmy Microsoft w celu uzyskania dostępu do zasobów usługi Azure Service Bus.Skonfiguruj następujące właściwości w pliku application.yml:
spring: cloud: azure: credential: managed-identity-enabled: true jms: servicebus: namespace: ${AZURE_SERVICEBUS_NAMESPACE} pricing-tier: ${PRICING_TIER} passwordless-enabled: true
Ważny
Jeśli używasz tożsamości zarządzanej przypisanej przez użytkownika, musisz również dodać właściwość
spring.cloud.azure.credential.client-id
przy użyciu identyfikatora klienta tożsamości zarządzanej przypisanej przez użytkownika.
Nawiązywanie połączenia z usługą Azure Service Bus JMS przy użyciu parametrów połączenia
Dodaj następujące właściwości i dobrze jest przejść.
spring:
jms:
servicebus:
connection-string: ${AZURE_SERVICEBUS_CONNECTION_STRING}
pricing-tier: ${PRICING_TIER}
Połączenia
Platforma Spring Cloud Azure oferuje następujące trzy opcje fabryki połączeń do nawiązywania połączenia z usługą Azure Service Bus JMS:
JmsPoolConnectionFactory
: ustawspring.jms.servicebus.pool.enabled=true
lub pozostaw ustawienia puli i pamięci podręcznej, aby użyć wartości domyślnej. Ta fabryka obsługuje pulę połączeń z opcjami dostosowywalnymi, takimi jakspring.jms.servicebus.pool.max-connections
. Dodatkowe ustawienia konfiguracji puli — poprzedzonespring.jms.servicebus.pool.
— zostały szczegółowo opisane w sekcji Configuration. Ta konfiguracja zwiększa wydajność dzięki wykorzystaniu funkcji równoważenia obciążenia usługi Azure Service Bus, dystrybucji ruchu między wieloma punktami końcowymi.CachingConnectionFactory
: ustawspring.jms.cache.enabled=true
i pozostawspring.jms.servicebus.pool.enabled
niezastawiony. Ta fabryka ponownie używa pojedynczego połączenia dla wszystkich wywołań doJmsTemplate
, co zmniejsza obciążenie związane z tworzeniem połączenia, co jest idealne w scenariuszach o niskim natężeniu ruchu. Jednak ten tryb nie korzysta z możliwości równoważenia obciążenia usługi Azure Service Bus.ServiceBusJmsConnectionFactory
: ustawspring.jms.servicebus.pool.enabled=false
ispring.jms.cache.enabled=false
na bezpośrednie używanieServiceBusJmsConnectionFactory
bez buforowania ani buforowania. W tym trybie każde wywołanieJmsTemplate
tworzy nowe połączenie, które może być intensywnie obciążane zasobami i mniej wydajne.
Aby uzyskać optymalną wydajność i rozkład obciążenia, zalecamy użycie JmsPoolConnectionFactory
przez ustawienie spring.jms.servicebus.pool.enabled=true
. Unikaj zawijania JmsPoolConnectionFactory
z CachingConnectionFactory
lub ServiceBusJmsConnectionFactory
, ponieważ może to uniemożliwić buforowanie korzyści i może spowodować utrzymywanie nieaktywnych połączeń po ich eksmitowaniu z puli.
Nuta
Począwszy od platformy Spring Cloud Azure 5.19.0, domyślna ConnectionFactory
została zaktualizowana do JmsPoolConnectionFactory
w celu lepszego korzystania z równoważenia obciążenia serwera usługi Service Bus. Jeśli wolisz nadal używać CachingConnectionFactory
do buforowania zarówno Session
, jak i MessageProducer
, ustaw spring.jms.cache.enabled
na wartość true
.
Próbki
Aby uzyskać więcej informacji, zobacz repozytorium azure-spring-boot-samples w witrynie GitHub.