Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule opisano sposób używania Azure Service Bus z interfejsem API JMS zintegrowanym z platformą Spring JMS.
Podstawowe funkcje
Połączenie bez hasła
Połączenie bez hasła wykorzystuje uwierzytelnianie Microsoft Entra do łączenia się z usługami Azure bez przechowywania żadnych poświadczeń w aplikacji, jej plikach konfiguracyjnych ani w zmiennych środowiskowych. Uwierzytelnianie Microsoft Entra to mechanizm nawiązywania połączenia z Azure Service Bus przy użyciu tożsamości zdefiniowanych w usłudze Microsoft Entra ID. Dzięki uwierzytelnianiu Microsoft Entra możesz zarządzać usługą Service Bus i innymi usługami Microsoft z jednego centralnego miejsca, co upraszcza zarządzanie uprawnieniami.
Jak to działa
Spring Cloud Azure najpierw tworzy jeden z następujących typów poświadczeń w zależności od konfiguracji uwierzytelniania aplikacji:
ClientSecretCredentialClientCertificateCredentialUsernamePasswordCredentialManagedIdentityCredential
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 użycia 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ć je 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ę Service Bus JMS. Wartość domyślna to true. |
spring.jms.servicebus.idle-timeout |
Limit czasu bezczynności dla połączenia, który wskazuje, jak długo klient oczekuje, że usługa Service Bus utrzyma połączenie aktywne, gdy nie są dostarczane żadne komunikaty. Wartość domyślna to 2m. |
spring.jms.servicebus.passwordless-enabled |
Czy włączyć uwierzytelnianie bez użycia hasła dla Azure Service Bus JMS. Wartość domyślna to false. |
spring.jms.servicebus.pricing-tier |
Warstwa cenowa Azure Service Bus. Obsługiwane wartości to premium i standard. Warstwa Premium korzysta z usługi Java Message Service (JMS) 2.0, podczas gdy warstwa Standardowa używa programu JMS 1.1 do interakcji z 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, który ma być używany 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 blokować przy żądaniu połączenia, gdy 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 puli przypadających na każde połączenie w puli. |
spring.jms.servicebus.pool.time-between-expiration-check |
Czas oczekiwania między kolejnymi uruchomieniami wątku usuwania bezczynnych połączeń. Jeśli wartość jest ujemna, wątek usuwania bezczynnych połączeń 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ść domyślna 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 operacji pobierania wstępnego dla trwałego tematu. Wartość domyślna to 0. |
spring.jms.servicebus.prefetch-policy.queue-browser-prefetch |
Liczba elementów pobieranych z wyprzedzeniem dla przeglądarki kolejki. 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 operacji wstępnego pobierania dla tematu. Wartość domyślna to 0. |
Uwaga
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 bez użycia 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życie identyfikatora Microsoft Entra ID do autoryzowania żądań dotyczących zasobów usługi Service Bus. W przypadku Microsoft Entra ID upewnij się, że masz przypisaną rolę właściciela danych Azure Service Bus do aktualnie używanego konta Microsoft Entra. Aby uzyskać więcej informacji, zobacz Przypisania ról Azure przy użyciu portalu Azure.
Łączenie z usługą Azure Service Bus za pomocą JMS przy użyciu tożsamości zarządzanej
Aby użyć tożsamości zarządzanej, włącz tożsamość zarządzaną usługi i przypisz rolę
Azure Service Bus Data Owner. Aby uzyskać więcej informacji, zobacz Jak uwierzytelnić tożsamość zarządzaną za pomocą usługi Microsoft Entra ID 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: trueWaż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-idz identyfikatorem klienta tożsamości zarządzanej przypisanej przez użytkownika.
Nawiązywanie połączenia z usługą Azure Service Bus JMS przy użyciu parametry połączenia
Dodaj następujące właściwości i wszystko gotowe.
spring:
jms:
servicebus:
connection-string: ${AZURE_SERVICEBUS_CONNECTION_STRING}
pricing-tier: ${PRICING_TIER}
Uwaga
Microsoft zaleca korzystanie z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Przepływ uwierzytelniania opisany w tej procedurze, taki jak bazy danych, pamięci podręczne, komunikaty lub usługi sztucznej inteligencji, wymaga bardzo wysokiego stopnia zaufania w aplikacji i niesie ze sobą ryzyko, które nie występują w innych przepływach. Użyj tego przepływu tylko wtedy, gdy bardziej bezpieczne opcje, takie jak tożsamości zarządzane dla połączeń bez hasła lub bez kluczy, nie są opłacalne. W przypadku operacji maszyny lokalnej preferuj tożsamości użytkowników dla połączeń bez hasła lub bez klucza.
Połączenia
Spring Cloud Azure udostępnia następujące trzy opcje Connection Factory do łączenia z usługą Azure Service Bus JMS:
JmsPoolConnectionFactory: Ta fabryka obsługuje pulę połączeń z opcjami dostosowywalnymi, takimi jakspring.jms.servicebus.pool.max-connections. Więcej ustawień konfiguracji puli — poprzedzonych prefiksemspring.jms.servicebus.pool.— opisano w sekcji Konfiguracja . Ta konfiguracja zwiększa wydajność przy użyciu funkcji równoważenia obciążenia Azure Service Bus, dystrybuując ruch między wiele punktów końcowych.CachingConnectionFactory: Ta fabryka wykorzystuje jedno połączenie dla wszystkich wywołań doJmsTemplate, zmniejszając narzut związany z ustanawianiem połączenia, co sprawdza się idealnie w scenariuszach o niewielkim natężeniu ruchu. Jednak ten tryb nie korzysta z możliwości równoważenia obciążenia Azure Service Bus.ServiceBusJmsConnectionFactory: W tym trybie każde wywołanieJmsTemplatetworzy nowe połączenie, co może wymagać dużych zasobów i być mniej efektywne.
Kiedy wszystkie trzy klasy znajdują się w classpathie, która z nich zostanie użyta? Poniższa tabela opisuje, co jest używane w zależności od właściwości konfiguracji (od wersji Spring Cloud Azure 7.1.0 i 6.2.0):
spring.jms.servicebus.pool.enabled |
spring.jms.cache.enabled |
Nadawcy ConnectionFactory |
Kontener nasłuchujący ConnectionFactory |
|---|---|---|---|
| nie ustawiono | nie ustawiono | CachingConnectionFactory |
ServiceBusJmsConnectionFactory |
| nie ustawiono | true |
CachingConnectionFactory |
CachingConnectionFactory |
| nie ustawiono | false |
ServiceBusJmsConnectionFactory |
ServiceBusJmsConnectionFactory |
true |
nie ustawiono | JmsPoolConnectionFactory |
JmsPoolConnectionFactory |
true |
true |
CachingConnectionFactory |
CachingConnectionFactory |
true |
false |
JmsPoolConnectionFactory |
JmsPoolConnectionFactory |
false |
nie ustawiono | CachingConnectionFactory |
ServiceBusJmsConnectionFactory |
false |
true |
CachingConnectionFactory |
CachingConnectionFactory |
false |
false |
ServiceBusJmsConnectionFactory |
ServiceBusJmsConnectionFactory |
Uwaga
Poniższa tabela przedstawia domyślną ConnectionFactory, gdy zarówno spring.jms.servicebus.pool.enabled, jak i spring.jms.cache.enabled nie są ustawione, dla różnych wersji Spring Cloud Azure:
| Wersja usługi Spring Cloud Azure | Nadawcy ConnectionFactory |
Kontener nasłuchiwacza ConnectionFactory |
|---|---|---|
| >= 6.2.0 lub >= 7.1.0 | CachingConnectionFactory |
ServiceBusJmsConnectionFactory |
| 6.1.0 i 7.0.0 | ServiceBusJmsConnectionFactory |
ServiceBusJmsConnectionFactory |
| <= 6.1.0 | JmsPoolConnectionFactory |
JmsPoolConnectionFactory |
Próbki
Aby uzyskać więcej informacji, zobacz repozytorium azure-spring-boot-samples w witrynie GitHub.