Azure Service Bus'a erişmek için Spring'de JMS kullanma

Bu öğreticide, Service Bus ve 'e ileti göndermek ve ileti almak için Azure Service Bus JMS için Spring Boot Starter'ın nasıl kullanılacağı gösterilmektedir queuestopics.

Azure, Gelişmiş İleti Kuyruğu Protokolü 1.0 ("AMQP 1.0") standardını temel alan Azure Service Bus ("Service Bus") adlı zaman uyumsuz bir ileti protokolü sağlar. Service Bus'ı desteklenen Azure platformları aralığında kullanabilirsiniz.

Azure Service Bus JMS için Spring Boot Starter, Service Bus ile Spring JMS tümleştirmesi sağlar.

Aşağıdaki videoda, JMS 2.0 kullanarak Spring JMS uygulamalarını Azure Service Bus ile tümleştirme açıklanmaktadır.


Bu öğreticide iki kimlik doğrulama yöntemi ekleyeceğiz: Microsoft Entra kimlik doğrulaması ve Paylaşılan Erişim İmzaları (SAS) kimlik doğrulaması. Parolasız sekmesi Microsoft Entra kimlik doğrulamasını, Bağlan ion dizesi sekmesi ise SAS kimlik doğrulamasını gösterir.

Microsoft Entra kimlik doğrulaması, Microsoft Entra Kimliği'nde tanımlanan kimlikleri kullanarak Azure Service Bus JMS'ye bağlanmaya yönelik bir mekanizmadır. Microsoft Entra kimlik doğrulaması ile veritabanı kullanıcı kimliklerini ve diğer Microsoft hizmetleri merkezi bir konumda yönetebilir ve bu da izin yönetimini basitleştirir.

SAS kimlik doğrulaması, Service Bus JMS'ye temsilci erişimi için Azure Service Bus ad alanınızın bağlantı dizesi kullanır. Paylaşılan Erişim İmzalarını kimlik bilgileri olarak kullanmayı seçerseniz, bağlantı dizesi kendiniz yönetmeniz gerekir.

Önkoşullar

Önemli

Bu öğreticideki adımları tamamlamak için Spring Boot sürüm 2.5 veya üzeri gereklidir.

Azure Service Bus'tan ileti gönderme ve alma

Azure Service Bus için bir kuyruk veya konu başlığıyla Spring Cloud Azure Service Bus JMS kullanarak ileti gönderip alabilirsiniz.

Spring Cloud Azure Service Bus JMS Starter modülünü yüklemek için pom.xml dosyanıza aşağıdaki bağımlılıkları ekleyin:

  • Spring Cloud Azure Ürün Reçetesi (BOM):

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.azure.spring</groupId>
          <artifactId>spring-cloud-azure-dependencies</artifactId>
          <version>5.11.0</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

    Not

    Spring Boot 2.x kullanıyorsanız, sürümünü olarak 4.17.0ayarladığınızdan spring-cloud-azure-dependencies emin olun. Bu Ürün Reçetesi (BOM), pom.xml dosyanızın bölümünde yapılandırılmalıdır<dependencyManagement>. Bu, tüm Spring Cloud Azure bağımlılıklarının aynı sürümü kullanmasını sağlar. Bu ürün reçetesi için kullanılan sürüm hakkında daha fazla bilgi için bkz . Spring Cloud Azure'ın Hangi Sürümünü Kullanmalıyım.

  • Spring Cloud Azure Service Bus JMS Starter yapıtı:

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

Uygulamayı kodlama

Uygulamanızı iletileri göndermek ve almak için Service Bus kuyruğu veya konu başlığı kullanacak şekilde yapılandırmak için aşağıdaki adımları kullanın.

  1. Application.properties dosyanıza aşağıdaki özellikleri ekleyerek Service Bus kimlik bilgilerini yapılandırın.

    Not

    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 rol tabanlı erişim denetimini (Azure RBAC) kullanarak bir kullanıcı veya uygulama hizmet sorumlusu olabilecek bir güvenlik sorumlusuna izin vekleyebilirsiniz.

    Önemli

    Başlamadan önce, kullanmakta olduğunuz Microsoft Entra hesabına Azure Service Bus Veri Sahibi rolünü atadığınızdan emin olun. Daha fazla bilgi edinmek için bkz. Azure portal kullanarak Azure rolleri atama.

    spring.jms.servicebus.namespace=<ServiceBusNamespace>
    spring.jms.servicebus.pricing-tier=<ServiceBusPricingTier>
    spring.jms.servicebus.passwordless-enabled=true
    spring.jms.listener.receive-timeout=60000
    

    Aşağıdaki tabloda yapılandırmadaki alanlar açıklanmaktadır:

    Alan Açıklama
    spring.jms.servicebus.namespace Azure portalından Service Bus hizmeti örneğinizde aldığınız ad alanını belirtin.
    spring.jms.servicebus.pricing-tier Service Bus'ınızın fiyatlandırma katmanını belirtin. Desteklenen değerler premium ve standarttır. 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.passwordless-enabled Parolasız kullanılıp kullanılmayacağını belirtin.
    spring.jms.listener.receive-timeout Varsayılan olarak alma zaman aşımı değeri 1000'dir. 60000 olarak ayarlamanızı öneririz
  2. JMS dinleyicisi ek açıklamalı uç noktaları için desteği etkinleştirmek için ekleyin @EnableJms . Aşağıdaki örnekte gösterildiği gibi iletileri göndermek ve @JmsListener almak için kullanınJmsTemplate:

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.jms.annotation.EnableJms;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.jms.annotation.JmsListener;
    import org.springframework.jms.core.JmsTemplate;
    
    @SpringBootApplication
    @EnableJms
    public class ServiceBusJMSQueueApplication implements CommandLineRunner {
    
        private static final Logger LOGGER = LoggerFactory.getLogger(ServiceBusJMSQueueApplication.class);
        private static final String QUEUE_NAME = "<QueueName>";
    
        @Autowired
        private JmsTemplate jmsTemplate;
    
        public static void main(String[] args) {
            SpringApplication.run(ServiceBusJMSQueueApplication.class, args);
        }
    
        @Override
        public void run(String... args) {
            LOGGER.info("Sending message");
            jmsTemplate.convertAndSend(QUEUE_NAME, "Hello World");
        }
    
        @JmsListener(destination = QUEUE_NAME, containerFactory = "jmsListenerContainerFactory")
        public void receiveMessage(String message) {
            LOGGER.info("Message received: {}", message);
        }
    
    }
    

    <QueueName> değerini Service Bus ad alanınızda yapılandırılmış kendi kuyruk adınızla değiştirin.

    İpucu

    Bu öğreticide yapılandırmalarda veya kodda kimlik doğrulama işlemi yoktur. Ancak Azure hizmetlerine bağlanmak için kimlik doğrulaması gerekir. Kimlik doğrulamasını tamamlamak için Azure Identity kullanmanız gerekir. Spring Cloud Azure, azure kimlik kitaplığının herhangi bir kod değişikliği yapmadan kimlik bilgilerini almanıza yardımcı olmak için sağladığı öğesini kullanır DefaultAzureCredential.

    DefaultAzureCredential birden çok kimlik doğrulama yöntemini destekler ve çalışma zamanında hangi yöntemin kullanılacağını belirler. Bu yaklaşım, uygulamanızın ortama özgü kod uygulamadan farklı ortamlarda (yerel ve üretim ortamları gibi) farklı kimlik doğrulama yöntemleri kullanmasını sağlar. Daha fazla bilgi için bkz . DefaultAzureCredential.

    Yerel geliştirme ortamlarında kimlik doğrulamasını tamamlamak için Azure CLI, Visual Studio Code, PowerShell veya diğer yöntemleri kullanabilirsiniz. Daha fazla bilgi için bkz . Java geliştirme ortamlarında Azure kimlik doğrulaması. Azure barındırma ortamlarında kimlik doğrulamasını tamamlamak için kullanıcı tarafından atanan yönetilen kimliği kullanmanızı öneririz. Daha fazla bilgi için bkz. Azure kaynakları için yönetilen kimlikler nelerdir?

  3. Uygulamayı başlatın. Aşağıdaki örnek çıktıda gösterildiği gibi uygulama günlüğünüzde görmeniz Sending message ve Hello World göndermeniz gerekir:

    Sending message
    Message received: Hello World
    

Azure Spring Apps'e dağıtma

Spring Boot uygulamasını yerel olarak çalıştırdığınıza göre artık uygulamayı üretim ortamına taşımanın zamanı geldi. Azure Spring Apps , kod değişikliği yapmadan Spring Boot uygulamalarını Azure'a dağıtmayı kolaylaştırır. Hizmet, geliştiricilerin kodlarına odaklanabilmesi için Spring uygulamalarının altyapısını yönetir. Azure Spring Apps kapsamlı izleme ve tanılama, yapılandırma yönetimi, hizmet bulma, CI/CD tümleştirmesi, mavi-yeşil dağıtımlar ve daha fazlasını kullanarak yaşam döngüsü yönetimi sağlar. Uygulamanızı Azure Spring Apps'e dağıtmak için bkz . İlk uygulamanızı Azure Spring Apps'e dağıtma.

Sonraki adımlar