Aracılığıyla paylaş


JMS ile Azure Service Bus kullanma

Bu makalede, Spring JMS çerçevesiyle tümleştirilmiş JMS API'siyle Azure Service Bus'ın nasıl kullanılacağı açıklanmaktadır.

Temel özellikler

Parolasız bağlantı

Parolasız bağlantı, uygulamada, yapılandırma dosyalarında veya ortam değişkenlerinde hiçbir kimlik bilgisi depolamadan Azure hizmetlerine bağlanmak için Microsoft Entra kimlik doğrulamasını kullanır. Microsoft Entra kimlik doğrulaması, Microsoft Entra Kimliği'nde tanımlanan kimlikleri kullanarak Azure Service Bus'a bağlanmaya yönelik bir mekanizmadır. Microsoft Entra kimlik doğrulaması ile Service Bus ve diğer Microsoft hizmetlerini merkezi bir konumda yönetebilirsiniz ve bu da izin yönetimini basitleştirir.

Nasıl çalışır?

Spring Cloud Azure, uygulama kimlik doğrulaması yapılandırmasına bağlı olarak ilk olarak aşağıdaki kimlik bilgileri türlerinden birini oluşturur:

  • ClientSecretCredential
  • ClientCertificateCredential
  • UsernamePasswordCredential
  • ManagedIdentityCredential

Bu tür kimlik bilgilerinin hiçbiri bulunmazsa, DefaultTokenCredential aracılığıyla kimlik bilgisi zinciri uygulama özelliklerinden, ortam değişkenlerinden, yönetilen kimlikten veya IDE'lerden kimlik bilgilerini almak için kullanılır. Daha fazla bilgi için bkz. Spring Cloud Azure kimlik doğrulaması.

Bağımlılık kurulumu

Spring JMS uygulamanızı Azure Service Bus kullanacak şekilde geçirmek istiyorsanız aşağıdaki bağımlılıkları ekleyin.

<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-starter-servicebus-jms</artifactId>
</dependency>

Konfigürasyon

Aşağıdaki tabloda Spring JMS desteği kullanılırken yapılandırılabilir özellikler açıklanmaktadır:

Mülk Açıklama
spring.jms.servicebus.connection-string Bağlantı dizesini doğrudan sağlamak istediğiniz zaman için Azure Service Bus bağlantı dizesi.
spring.jms.servicebus.topic-client-id JMS istemci kimliği. Sadece topicJmsListenerContainerFactory fasulye için çalışır.
spring.jms.servicebus.enabled Service Bus JMS otomatik yapılandırmasının etkinleştirilip etkinleştirilmeymeyeceğini gösteren değer. Varsayılan değer true.
spring.jms.servicebus.idle-timeout İstemcinin hiçbir ileti teslim edilmemişse Service Bus'ın bağlantıyı ne kadar süreyle canlı tutmasını beklediğini gösteren bağlantı boşta kalma zaman aşımı süresi. Varsayılan değer 2m.
spring.jms.servicebus.passwordless-enabled Azure Service Bus JMS için parolasız etkinleştirme. Varsayılan değer false.
spring.jms.servicebus.pricing-tier Azure Service Bus Fiyat Katmanı. Desteklenen değerler premium ve standard. Premium katman Java İleti Hizmeti (JMS) 2.0'ı kullanırken standart katmanda Azure Service Bus ile etkileşime geçmek için JMS 1.1 kullanılır.
spring.jms.servicebus.listener.reply-pub-sub-domain Yanıt hedef türünün bir konu başlığı olup olmadığını gösteren değer. Sadece topicJmsListenerContainerFactory fasulye için çalışır.
spring.jms.servicebus.listener.phase Bu kapsayıcının başlatılması ve durdurulması gereken aşama.
spring.jms.servicebus.listener.reply-qos-settings Yanıt gönderirken kullanılacak QosSettings yapılandırılır.
spring.jms.servicebus.listener.subscription-dayanıklı Aboneliğin dayanıklı olup olmayacağını gösteren bir değer. Sadece topicJmsListenerContainerFactory fasulye için çalışır. Varsayılan değer true.
spring.jms.servicebus.listener.subscription-shared Aboneliğin paylaşılıp paylaşılmayacağını gösteren değer. Sadece topicJmsListenerContainerFactory fasulye için çalışır.
spring.jms.servicebus.pool.block-if-full Bir bağlantı istendiğinde ve havuz dolu olduğunda engellenip engellenmeyeceğini gösteren değer. Bunun yerine bir JMSException oluşturmak için false olarak ayarlayın.
spring.jms.servicebus.pool.block-if-full-timeout Havuz hala doluysa özel durum oluşturmadan önce engelleme süresi.
spring.jms.servicebus.pool.enabled Normal JmsPoolConnectionFactoryyerine bir ConnectionFactory oluşturulup oluşturulmayacağını gösteren değer.
spring.jms.servicebus.pool.idle-timeout Bağlantı havuzu boşta kalma zaman aşımı.
spring.jms.servicebus.pool.max-connections Havuza alınan bağlantı sayısı üst sınırı.
spring.jms.servicebus.pool.max-sessions-per-connection Havuzdaki bağlantı başına havuza alınan oturum sayısı üst sınırı.
spring.jms.servicebus.pool.time-between-expiration-check Boşta bağlantı çıkarma iş parçacığı çalıştırmaları arasında uyku süresi. Negatif olduğunda boşta bağlantı çıkarma iş parçacığı çalıştırılır.
spring.jms.servicebus.pool.use-anonim-üreticiler Yalnızca bir anonim MessageProducer örneğinin kullanılıp kullanılmayacağını gösteren bir değer. Her gerektiğinde bir false oluşturmak için MessageProducer olarak ayarlayın.
spring.jms.servicebus.prefetch-policy.all Bu Service Bus ad alanında prefetch seçeneğinin geri dönüş değeri. Varsayılan değer 0.
spring.jms.servicebus.prefetch-policy.durable-topic-prefetch Dayanıklı konu için ön koşul sayısı. Varsayılan değer 0.
spring.jms.servicebus.prefetch-policy.queue-browser-prefetch Kuyruk tarayıcısı için ön koşul sayısı. Varsayılan değer 0.
spring.jms.servicebus.prefetch-policy.queue-prefetch Kuyruk için ön koşul sayısı. Varsayılan değer 0.
spring.jms.servicebus.prefetch-policy.topic-prefetch Konu için ön koşul sayısı. Varsayılan değer 0.

Not

Spring JMS genel yapılandırması kısaca atlanır.

Daha fazla bilgi için bkz. Spring JMS Belgesi.

Temel kullanım

Parolasız kullanarak Azure Service Bus JMS'ye bağlanma

application.yml dosyanızda aşağıdaki özellikleri yapılandırın:

spring:
  jms:
    servicebus:
      namespace: ${AZURE_SERVICEBUS_NAMESPACE}
      pricing-tier: ${PRICING_TIER}
      passwordless-enabled: true

Önemli

Azure Service Bus JMS, Service Bus kaynaklarına yönelik istekleri yetkilendirmek için Microsoft Entra Id kullanılmasını destekler. Microsoft Entra Id ile, azure service bus veri sahibi rolünü kullanmakta olduğunuz Microsoft Entra hesabına atadığınızdan emin olun. Daha fazla bilgi için bkz. Azure portalını kullanarak Azure rolleri atama.

JMS ile Azure Service Bus'a bağlanma Yönetilen Kimlik kullanma

  1. Yönetilen kimliği kullanmak için hizmetiniz için yönetilen kimliği etkinleştirin ve Azure Service Bus Data Owner rolünü atayın. Daha fazla bilgi için bkz. Azure Service Bus kaynaklarına erişmek için Microsoft Entra Id ile yönetilen kimliğin kimliğini doğrulama.

  2. application.yml dosyanızda aşağıdaki özellikleri yapılandırın:

    spring:
      cloud:
        azure:
          credential:
            managed-identity-enabled: true
      jms:
        servicebus:
          namespace: ${AZURE_SERVICEBUS_NAMESPACE}
          pricing-tier: ${PRICING_TIER}
          passwordless-enabled: true
    

    Önemli

    Kullanıcı tarafından atanan yönetilen kimlik kullanıyorsanız, kullanıcı tarafından atanan yönetilen kimlik istemci kimliğiniz ile spring.cloud.azure.credential.client-id özelliğini de eklemeniz gerekir.

Bağlantı dizesini kullanarak Azure Service Bus JMS'ye bağlanma

Aşağıdaki özellikleri eklediğinizde hazır olursunuz.

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

Not

Microsoft, kullanılabilir en güvenli kimlik doğrulama akışının kullanılmasını önerir. Veritabanları, önbellekler, mesajlaşma veya yapay zeka hizmetleri gibi bu yordamda açıklanan kimlik doğrulama akışı, uygulamaya çok yüksek düzeyde güven gerektirir ve diğer akışlarda mevcut olmayan riskler taşır. Bu akışı yalnızca parolasız veya anahtarsız bağlantılar için yönetilen kimlikler gibi daha güvenli seçenekler uygun olmadığında kullanın. Yerel makine işlemleri için parolasız veya anahtarsız bağlantılar için kullanıcı kimliklerini tercih edin.

Bağlantı

Spring Cloud Azure, Azure Service Bus JMS'ye bağlanmak için aşağıdaki üç Connection Factory seçeneğini sağlar:

  • JmsPoolConnectionFactory: öğesini ayarlayın spring.jms.servicebus.pool.enabled=true. Bu fabrika, spring.jms.servicebus.pool.max-connectionsgibi özelleştirilebilir seçeneklere sahip bir bağlantı havuzu tutar. spring.jms.servicebus.pool. ön ekli ek havuz yapılandırma ayarları, Yapılandırma bölümünde ayrıntılı olarak gösterilir. Bu kurulum, Azure Service Bus'ın yük dengeleme özelliğinden yararlanarak ve trafiği birden çok uç noktaya dağıtarak performansı artırır.

  • CachingConnectionFactory: öğesini ayarlayın spring.jms.cache.enabled=true. Bu fabrika, JmsTemplatetüm çağrıları için tek bir bağlantıyı yeniden kullanarak düşük trafikli senaryolar için ideal olan bağlantı oluşturma yükünü azaltır. Ancak bu mod, Azure Service Bus'ın yük dengeleme özelliğinden yararlanmaz.

  • ServiceBusJmsConnectionFactory: Havuz veya spring.jms.cache.enabled=false önbelleğe alma olmadan varsayılan değeri kullanmak için hem havuz hem de önbellek ayarlarını ayarlayın spring.jms.servicebus.pool.enabled=false ve bırakın. Bu modda, her JmsTemplate çağrısı, yoğun kaynak kullanımlı ve daha az verimli olabilecek yeni bir bağlantı oluşturur.

Not

Spring Cloud Azure 6.1.0'dan itibaren varsayılan ConnectionFactory olarak olarak ServiceBusJmsConnectionFactorydeğiştirilmiştir.

Örnekleri

Daha fazla bilgi için GitHub'daki azure-spring-boot-samples deposuna bakın.