Udostępnij za pośrednictwem


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

  1. 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.

  2. 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: ustaw spring.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 jak spring.jms.servicebus.pool.max-connections. Dodatkowe ustawienia konfiguracji puli — poprzedzone spring.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: ustaw spring.jms.cache.enabled=true i pozostaw spring.jms.servicebus.pool.enabled niezastawiony. Ta fabryka ponownie używa pojedynczego połączenia dla wszystkich wywołań do JmsTemplate, 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: ustaw spring.jms.servicebus.pool.enabled=false i spring.jms.cache.enabled=false na bezpośrednie używanie ServiceBusJmsConnectionFactory bez buforowania ani buforowania. W tym trybie każde wywołanie JmsTemplate 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.