Aracılığıyla paylaş


Spring uygulamalarında Azure Service Bus kullanma

Bu makalede, Spring Framework ile oluşturulan Java uygulamalarında Azure Service Bus'ın nasıl kullanılacağı gösterilmektedir.

Azure, Gelişmiş İleti Kuyruğa Alma Protokolü 1.0 (AMQP 1.0) standardını temel alan Azure Service Bus (Service Bus) adlı zaman uyumsuz bir mesajlaşma platformu sağlar. Service Bus'ı desteklenen Azure platformları aralığında kullanabilirsiniz.

Spring Cloud Azure, Spring çerçevelerini kullanarak Service Bus kuyrukları ve konular ile / mesaj göndermek ve mesaj almak için çeşitli modüller sağlar.

Aşağıdaki modülleri bağımsız olarak kullanabilir veya farklı kullanım örnekleri için birleştirebilirsiniz:

Önkoşullar

Not

Hesabınıza Service Bus kaynaklarınıza erişim vermek için, yeni oluşturduğunuz Azure Service Bus ad alanında, kullanmakta olduğunuz Microsoft Entra hesabına Azure Service Bus Veri Göndereni ve Azure Service Bus Veri Alıcısı rollerini atayın. Daha fazla bilgi edinmek için bkz. Azure portal kullanarak Azure rolleri atama.

Önemli

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

Yerel ortamınızı hazırlama

Bu öğreticide, yapılandırmalar ve kodlarda herhangi bir kimlik doğrulama işlemi yoktur. Ancak, bir Azure hizmetine bağlanmak için kimlik doğrulaması gerekir. Kimlik doğrulamasını tamamlamak için Azure Identity istemci kitaplığını 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 veya üretim ortamları gibi) farklı kimlik doğrulama yöntemleri kullanmasını sağlar. Daha fazla bilgi için Azure'da barındırılan Java uygulamalarının kimliğini doğrulama işleminin DefaultAzureCredential bölümüne bakın.

Yerel geliştirme ortamlarında kimlik doğrulamasını tamamlamak için Azure CLI, IntelliJ veya diğer yöntemleri kullanmak 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 yönetilen kimlik kullanmanızı öneririz. Daha fazla bilgi için bkz. Azure kaynakları için yönetilen kimlikler nelerdir?

Not

JMS API için Azure Service Bus şu anda desteklememektedir DefaultAzureCredential. Service Bus ile Spring JMS kullanıyorsanız bu adımı yoksayın.

Spring Cloud Azure Service Bus Starter'ını kullanma

Spring Cloud Azure Service Bus Starter modülü, Spring Boot çerçevesi ile Service Bus Java istemci kitaplığını içeri aktarır. Spring Cloud Azure'ı ve Azure SDK'sını birbirini dışlayan olmayan bir düzende birlikte kullanabilirsiniz. Bu nedenle, Spring uygulamanızda Service Bus Java istemci API'sini kullanmaya devam edebilirsiniz.

Service Bus bağımlılığını ekleme

Spring Cloud Azure Service Bus 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>6.0.0</version>
           <type>pom</type>
           <scope>import</scope>
           </dependency>
       </dependencies>
    </dependencyManagement>
    

    Not

    Spring Boot 3.0.x-3.4.x kullanıyorsanız, spring-cloud-azure-dependencies sürümünü 5.23.0 olarak ayarladığınızdan emin olun.

    Spring Boot 2.x kullanıyorsanız, sürümünü spring-cloud-azure-dependencies olarak 4.20.0 ayarladığınızdan emin olun.

    Bu Ürün Reçetesi (BOM), <dependencyManagement>pom.xml dosyanızın bölümünde yapılandırılmalıdır. 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 bilgiyi, Spring Cloud Azure'ın Hangi Sürümünü Kullanmalıyım bölümüne bakarak edinebilirsiniz.

  • Spring Cloud Azure Service Bus bileşeni:

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

İleti göndermek ve almak için uygulamayı kodlayın

Bu kılavuz, Service Bus Java istemcilerini spring uygulaması bağlamında nasıl kullanacağınızı öğretir. Burada iki alternatif tanıtacağız. Önerilen yol Spring Boot Otomatik Yapılandırma'nın kullanılması ve Spring bağlamında kullanıma sunulan istemcilerin kullanılmasıdır. Alternatif yol, program aracılığıyla kendi istemcilerinizi oluşturmaktır.

İstemci çekirdeklerini Spring IoC kapsayıcısından otomatik olarak kablolamanın yer aldığı ilk yol, ikinci yolla karşılaştırıldığında aşağıdaki avantajlara sahiptir. Bu avantajlar, Service Bus istemcileri ile geliştirme yaparken size daha esnek ve verimli bir deneyim sağlar.

  • Dışlaştırılmış yapılandırmayı kullanarak farklı ortamlarda aynı uygulama koduyla çalışabilirsiniz.

  • Builder desenini öğrenme sürecini ve bu istemciyi uygulama bağlamına kaydetme işlemlerini Spring Boot çerçevesine devredebilirsiniz. Bu temsilci, istemcileri kendi iş gereksinimlerinizle nasıl kullanacağınıza odaklanmanızı sağlar.

  • Uygulamanızın ve iç bileşenlerin durumunu ve durumunu incelemek için sistem durumu göstergesini kolay bir şekilde kullanabilirsiniz.

Aşağıdaki kod örneği, ServiceBusSenderClient ve ServiceBusProcessorClient'yi bu iki alternatifle nasıl kullanacağınızı gösterir.

Not

Service Bus için Azure Java SDK'sı, Service Bus ile etkileşime geçmek için birden çok istemci sağlar. Başlatıcı ayrıca tüm Service Bus istemcileri ve istemci oluşturucuları için otomatik yapılandırma sağlar. Burada yalnızca ServiceBusSenderClient ve ServiceBusProcessorClient örnek olarak kullanılır.

Spring Boot Otomatik Yapılandırmayı Kullanma

Service Bus'a ileti göndermek ve service Bus'tan ileti almak için aşağıdaki adımları kullanarak uygulamayı yapılandırın:

  1. Aşağıdaki örnekte gösterildiği gibi Service Bus ad alanınızı ve kuyruğunuzu yapılandırın:

    spring.cloud.azure.servicebus.namespace=<your-servicebus-namespace-name>
    spring.cloud.azure.servicebus.entity-name=<your-servicebus-queue-name>
    spring.cloud.azure.servicebus.entity-type=queue
    

    İpucu

    Burada örnek olarak Service Bus kuyruğu kullanıyoruz. Konu/abonelik kullanmak için spring.cloud.azure.servicebus.processor.subscription-name özelliğini eklemeniz ve entity-type değerini topic olarak değiştirmeniz gerekir.

  2. Aşağıdaki örnekte gösterildiği gibi yeni ServiceBusProcessorClientConfiguration bir Java sınıfı oluşturun. Bu sınıf, iletisini ve hata işleyicisini ServiceBusProcessorClientkaydetmek için kullanılır.

    @Configuration(proxyBeanMethods = false)
    public class ServiceBusProcessorClientConfiguration {
    
        @Bean
        ServiceBusRecordMessageListener processMessage() {
            return context -> {
                ServiceBusReceivedMessage message = context.getMessage();
                System.out.printf("Processing message. Id: %s, Sequence #: %s. Contents: %s%n", message.getMessageId(),
                        message.getSequenceNumber(), message.getBody());
            };
        }
    
        @Bean
        ServiceBusErrorHandler processError() {
            return context -> {
                System.out.printf("Error when receiving messages from namespace: '%s'. Entity: '%s'%n",
                        context.getFullyQualifiedNamespace(), context.getEntityPath());
            };
        }
    }
    
  3. ServiceBusSenderClient Aşağıdaki örnekte gösterildiği gibi Spring uygulamanıza öğesini ekleyin ve iletileri göndermek için ilgili API'leri çağırın:

    @SpringBootApplication
    public class ServiceBusQueueApplication implements CommandLineRunner {
    
        private final ServiceBusSenderClient senderClient;
    
        public ServiceBusQueueApplication(ServiceBusSenderClient senderClient) {
            this.senderClient = senderClient;
        }
    
        public static void main(String[] args) {
            SpringApplication.run(ServiceBusQueueApplication.class, args);
        }
    
        @Override
        public void run(String... args) throws Exception {
            // send one message to the queue
            senderClient.sendMessage(new ServiceBusMessage("Hello, World!"));
            System.out.printf("Sent a message to the queue");
            senderClient.close();
    
            // wait the processor client to consume messages
            TimeUnit.SECONDS.sleep(10);
        }
    
    }
    

    Not

    Varsayılan olarak, otomatik kablolu ServiceBusProcessorClient çekirdeğin yaşam döngüsü Spring bağlamı tarafından yönetilir. İşlemci, Spring Uygulama Bağlamı başlatıldığında otomatik olarak başlatılır ve Spring Uygulama Bağlamı durduğunda durdurulur. Bu özelliği devre dışı bırakmak için yapılandırın spring.cloud.azure.servicebus.processor.auto-startup=false.

  4. Uygulamayı başlatın. Aşağıdaki örneğe benzer günlükler gösterilir:

    Sent a message to the queue
    Processing message. Id: 6f405435200047069a3caf80893a80bc, Sequence #: 1. Contents: Hello, World!
    

Program aracılığıyla Service Bus istemcileri oluşturma

Bu istemci çekirdeklerini kendiniz oluşturabilirsiniz, ancak süreç karmaşıktır. Spring Boot uygulamalarında özellikleri yönetmeniz, oluşturucu desenini öğrenmeniz ve istemciyi Spring uygulama bağlamınıza kaydetmeniz gerekir. Aşağıdaki kod örneği bunun nasıl yapılacağını gösterir:

  1. Aşağıdaki örnekte gösterildiği gibi yeni ServiceBusClientConfiguration bir Java sınıfı oluşturun. Bu sınıf, ServiceBusSenderClient ve ServiceBusProcessorClient bean'lerini bildirmek için kullanılır.

    @Configuration(proxyBeanMethods = false)
    public class ServiceBusClientConfiguration {
    
        private static final String SERVICE_BUS_FQDN = "<service-bus-fully-qualified-namespace>";
        private static final String QUEUE_NAME = "<service-bus-queue-name>";
    
        @Bean
        ServiceBusClientBuilder serviceBusClientBuilder() {
            return new ServiceBusClientBuilder()
                       .fullyQualifiedNamespace(SERVICE_BUS_FQDN)
                       .credential(new DefaultAzureCredentialBuilder().build());
        }
    
        @Bean
        ServiceBusSenderClient serviceBusSenderClient(ServiceBusClientBuilder builder) {
            return builder
                   .sender()
                   .queueName(QUEUE_NAME)
                   .buildClient();
        }
    
        @Bean
        ServiceBusProcessorClient serviceBusProcessorClient(ServiceBusClientBuilder builder) {
            return builder.processor()
                          .queueName(QUEUE_NAME)
                          .processMessage(ServiceBusClientConfiguration::processMessage)
                          .processError(ServiceBusClientConfiguration::processError)
                          .buildProcessorClient();
        }
    
        private static void processMessage(ServiceBusReceivedMessageContext context) {
            ServiceBusReceivedMessage message = context.getMessage();
            System.out.printf("Processing message. Id: %s, Sequence #: %s. Contents: %s%n",
                message.getMessageId(), message.getSequenceNumber(), message.getBody());
        }
    
        private static void processError(ServiceBusErrorContext context) {
            System.out.printf("Error when receiving messages from namespace: '%s'. Entity: '%s'%n",
                    context.getFullyQualifiedNamespace(), context.getEntityPath());
        }
    }
    

    Not

    Yer tutucusunu Azure portalından <service-bus-fully-qualified-namespace> Service Bus ana bilgisayar adınızla değiştirmeyi unutmayın. Yer tutucusunu <service-bus-queue-name> Service Bus ad alanınızda yapılandırılan kendi kuyruk adınızla değiştirin.

  2. Aşağıdaki örnekte gösterildiği gibi istemci çekirdeklerini uygulamanıza ekleyin:

    @SpringBootApplication
    public class ServiceBusQueueApplication implements CommandLineRunner {
    
        private final ServiceBusSenderClient senderClient;
    
        private final ServiceBusProcessorClient processorClient;
    
        public ServiceBusQueueApplication(ServiceBusSenderClient senderClient, ServiceBusProcessorClient processorClient) {
            this.senderClient = senderClient;
            this.processorClient = processorClient;
        }
    
        public static void main(String[] args) {
            SpringApplication.run(ServiceBusQueueApplication.class, args);
        }
    
        @Override
        public void run(String... args) throws Exception {
            // send one message to the queue
            senderClient.sendMessage(new ServiceBusMessage("Hello, World!"));
            System.out.printf("Sent a message to the queue");
            senderClient.close();
    
            System.out.printf("Starting the processor");
            processorClient.start();
            TimeUnit.SECONDS.sleep(10);
            System.out.printf("Stopping and closing the processor");
            processorClient.close();
        }
    
    }
    
  3. Uygulamayı başlatın. Aşağıdaki örneğe benzer günlükler gösterilir:

    Sent a message to the queue
    Starting the processor
    ...
    Processing message. Id: 6f405435200047069a3caf80893a80bc, Sequence #: 1. Contents: Hello, World!
    Stopping and closing the processor
    

Aşağıdaki listede bu kodun esnek veya zarif olmamasının nedenleri gösterilmektedir.

  • Ad alanı ve kuyruk/konu/abonelik adları sabit kodlanmıştır.
  • Spring ortamından yapılandırmaları almak için kullanıyorsanız@Value, application.properties dosyanızda IDE ipuçlarına sahip olamazsınız.
  • Mikro hizmet senaryonuz varsa, kodu her projede yinelemeniz gerekir ve hata yapmak kolaydır ve tutarlı olmak zordur.

Neyse ki Spring Cloud Azure ile istemci çekirdeklerini kendiniz oluşturmak gerekli değildir. Bunun yerine, çekirdekleri doğrudan ekleyebilir ve Service Bus'ı yapılandırmak için zaten bildiğiniz yapılandırma özelliklerini kullanabilirsiniz.

Spring Cloud Azure, farklı senaryolar için aşağıdaki genel yapılandırmaları da sağlar. Daha fazla bilgi için Spring Cloud Azure yapılandırmasının Azure Hizmet SDK'ları için genel yapılandırma bölümüne bakın.

  • Proxy ayarları.
  • Yeniden deneme seçenekleri.
  • AMQP aktarım istemcisi seçenekleri.

Ayrıca farklı Azure bulutlarına da bağlanabilirsiniz. Daha fazla bilgi için bkz . Farklı Azure bulutlarına bağlanma.

Spring Cloud Azure Service Bus JMS Starter'ını kullanma

Spring Cloud Azure Service Bus JMS Starter modülü, 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 kılavuzda, Service Bus'a ileti göndermek ve service Bus'tan ileti almak üzere JMS API'sine yönelik Spring Cloud Azure Service Bus Starter'ın nasıl kullanılacağı gösterilmektedir.

Service Bus bağımlılığını ekleme

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>6.0.0</version>
           <type>pom</type>
           <scope>import</scope>
           </dependency>
       </dependencies>
    </dependencyManagement>
    

    Not

    Spring Boot 3.0.x-3.4.x kullanıyorsanız, spring-cloud-azure-dependencies sürümünü 5.23.0 olarak ayarladığınızdan emin olun.

    Spring Boot 2.x kullanıyorsanız, sürümünü spring-cloud-azure-dependencies olarak 4.20.0 ayarladığınızdan emin olun.

    Bu Ürün Reçetesi (BOM), <dependencyManagement>pom.xml dosyanızın bölümünde yapılandırılmalıdır. 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 bilgiyi, Spring Cloud Azure'ın Hangi Sürümünü Kullanmalıyım bölümüne bakarak edinebilirsiniz.

  • Spring Cloud Azure Service Bus JMS artifaktı:

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

İleti göndermek ve almak için uygulamayı kodlayın

  1. Aşağıdaki örnekte gösterildiği gibi Service Bus'ınızın bağlantı dizesi ve fiyatlandırma katmanını yapılandırın:

    spring.jms.servicebus.connection-string=<service-bus-namespace-connection-string>
    spring.jms.servicebus.pricing-tier=<service-bus-pricing-tier>
    
  2. İleti alıcısını oluşturun.

    Spring, herhangi bir POJO'ya (Düz Eski Java Nesnesi) ileti yayımlamak için araçlar sağlar. İlk olarak, aşağıdaki örnekte gösterildiği gibi, kullanıcının adını depo eden ve geri alan bir genel sınıf User tanımlayın.

    public class User implements Serializable {
    
        private static final long serialVersionUID = -295422703255886286L;
    
        private String name;
    
        public User() {
        }
    
        public User(String name) {
            setName(name);
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    

    İpucu

    Spring çerçevesinde Serializable içinde send yöntemini kullanmak için JmsTemplate uygulanmıştır. Aksi takdirde, içeriği metin biçiminde JSON'a seri hale getirmek için özelleştirilmiş MessageConverter bir fasulye tanımlamanız gerekir. MessageConverter hakkında daha fazla bilgi için resmi Spring JMS Starter projesine bakın.

  3. Buradan, aşağıdaki örnekte gösterildiği gibi yeni QueueReceiveService bir Java sınıfı oluşturabilirsiniz. Bu sınıf, bir ileti alıcısı tanımlamak için kullanılır.

    @Component
    public class QueueReceiveService {
    
        private static final String QUEUE_NAME = "<service-bus-queue-name>";
    
        @JmsListener(destination = QUEUE_NAME, containerFactory = "jmsListenerContainerFactory")
        public void receiveMessage(User user) {
            System.out.printf("Received a message from %s.", user.getName());
        }
    }
    

    Not

    Yer tutucusunu <service-bus-queue-name> Service Bus ad alanınızda yapılandırılan kendi kuyruk adınızla değiştirmeyi unutmayın.

    Konu/abonelik kullanıyorsanız, parametresini destination konu adı olarak değiştirin ve containerFactory parametresi olmalıdır topicJmsListenerContainerFactory. Ayrıca, abonelik adını açıklamak için parametresini ekleyin subscription .

  4. Aşağıdaki örnekte gösterildiği gibi Spring ile ileti göndermek ve almak için bir göndereni ve alıcıyı bağla:

    @SpringBootApplication
    @EnableJms
    public class ServiceBusJmsStarterApplication {
    
        private static final String QUEUE_NAME = "<service-bus-queue-name>";
    
        public static void main(String[] args) {
            ConfigurableApplicationContext context = SpringApplication.run(ServiceBusJMSQueueApplication.class, args);
            JmsTemplate jmsTemplate = context.getBean(JmsTemplate.class);
    
            // Send a message with a POJO - the template reuse the message converter
            System.out.println("Sending a user message.");
            jmsTemplate.convertAndSend(QUEUE_NAME, new User("Tom"));
        }
    }
    

    Not

    Yer tutucusunu <service-bus-queue-name> Service Bus ad alanınızda yapılandırılan kendi kuyruk adınızla değiştirmeyi unutmayın.

    İpucu

    @EnableIntegration ek açıklamasını eklediğinizden emin olun, bu da @JmsListener ek açıklamasıyla belirtilmiş olan yöntemlerin keşfini tetikleyerek, arka planda ileti dinleyici kapsayıcısını oluşturur.

  5. Uygulamayı başlatın. Aşağıdaki örneğe benzer günlükler gösterilir:

    Sending a user message.
    Received a message from Tom.
    

Diğer bilgiler

Daha fazla bilgi için bkz . Service Bus ve AMQP 1.0 ile JMS API'sini kullanma.

Spring Messaging Azure Service Bus kullanma

Spring Messaging Azure Service Bus modülü, Service Bus ile Spring Messaging çerçevesi için destek sağlar.

Spring Messaging Azure Service Bus kullanıyorsanız aşağıdaki özellikleri kullanabilirsiniz:

  • ServiceBusTemplate: Service Bus kuyruklarına ve başlıklara eşzamanlı olmayan ve eşzamanlı olarak ileti göndermek için kullanın.
  • @ServiceBusListener: bir yöntemi, hedeflenen Service Bus ileti dinleyicisinin hedefi olarak işaretleyin.

Bu kılavuzda, Service Bus'a ileti göndermek ve Service Bus'tan ileti almak için Spring Messaging Azure Service Bus'ın nasıl kullanılacağı gösterilmektedir.

Service Bus bağımlılığını ekleme

Spring Messaging Azure Service Bus 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>6.0.0</version>
           <type>pom</type>
           <scope>import</scope>
           </dependency>
       </dependencies>
    </dependencyManagement>
    

    Not

    Spring Boot 3.0.x-3.4.x kullanıyorsanız, spring-cloud-azure-dependencies sürümünü 5.23.0 olarak ayarladığınızdan emin olun.

    Spring Boot 2.x kullanıyorsanız, sürümünü spring-cloud-azure-dependencies olarak 4.20.0 ayarladığınızdan emin olun.

    Bu Ürün Reçetesi (BOM), <dependencyManagement>pom.xml dosyanızın bölümünde yapılandırılmalıdır. 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 bilgiyi, Spring Cloud Azure'ın Hangi Sürümünü Kullanmalıyım bölümüne bakarak edinebilirsiniz.

  • Spring Messaging Service Bus ve Spring Cloud Azure başlangıç yapıtları:

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

İleti göndermek ve almak için uygulamayı kodlayın

  1. Aşağıdaki örnekte gösterildiği gibi Service Bus'ınız için ad alanını ve kuyruk türünü yapılandırın:

    spring.cloud.azure.servicebus.namespace=<service-bus-namespace-name>
    spring.cloud.azure.servicebus.entity-type=queue
    

    Not

    Konu/abonelik kullanıyorsanız spring.cloud.azure.servicebus.entity-type değerini topic olarak değiştirin.

  2. Aşağıdaki örnekte gösterildiği gibi yeni ConsumerService bir Java sınıfı oluşturun. Bu sınıf, bir ileti alıcısı tanımlamak için kullanılır.

    @Service
    public class ConsumerService {
    
        private static final String QUEUE_NAME = "<service-bus-queue-name>";
    
        @ServiceBusListener(destination = QUEUE_NAME)
        public void handleMessageFromServiceBus(String message) {
            System.out.printf("Consume message: %s%n", message);
        }
    
    }
    

    Not

    Konu/abonelik kullanıyorsanız, destination parametresini konu adı olarak değiştirin ve abonelik adını açıklamak için group parametresini ekleyin.

  3. Aşağıdaki örnekte gösterildiği gibi Spring ile ileti göndermek ve almak için bir göndereni ve alıcıyı bağla:

    @SpringBootApplication
    @EnableAzureMessaging
    public class Application {
    
        private static final String QUEUE_NAME = "<service-bus-queue-name>";
    
        public static void main(String[] args) {
            ConfigurableApplicationContext applicationContext = SpringApplication.run(Application.class);
            ServiceBusTemplate serviceBusTemplate = applicationContext.getBean(ServiceBusTemplate.class);
            System.out.println("Sending a message to the queue.");
            serviceBusTemplate.sendAsync(QUEUE_NAME, MessageBuilder.withPayload("Hello world").build()).subscribe();
        }
    }
    

    İpucu

    @EnableAzureMessaging ek açıklamasını eklediğinizden emin olun, bu da @ServiceBusListener ek açıklamasıyla belirtilmiş olan yöntemlerin keşfini tetikleyerek, arka planda ileti dinleyici kapsayıcısını oluşturur.

  4. Uygulamayı başlatın. Aşağıdaki örneğe benzer günlükler gösterilir:

    Sending a message to the queue.
    Consume message: Hello world.
    

Spring Integration Azure Service Bus kullanma

Spring Integration Azure Service Bus modülü, Service Bus ile Spring Integration çerçevesi için destek sağlar.

Spring uygulamanız Spring Integration ileti kanallarını kullanıyorsa, kanal bağdaştırıcılarını kullanarak iletileri ileti kanallarınızla Service Bus arasında yönlendirebilirsiniz.

Gelen kanal bağdaştırıcısı, Service Bus kuyruğundan veya aboneliğinden iletileri mesaj kanalına iletir. Giden kanal adaptörü, bir ileti kanalındaki iletileri Service Bus kuyruğuna ve konu başlığına yayımlar.

Bu kılavuzda, Service Bus'a ileti göndermek ve Service Bus'tan ileti almak için Spring Integration Azure Service Bus'ın nasıl kullanılacağı gösterilmektedir.

Service Bus bağımlılığını ekleme

Spring Cloud Azure Service Bus Integration 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>6.0.0</version>
           <type>pom</type>
           <scope>import</scope>
           </dependency>
       </dependencies>
    </dependencyManagement>
    

    Not

    Spring Boot 3.0.x-3.4.x kullanıyorsanız, spring-cloud-azure-dependencies sürümünü 5.23.0 olarak ayarladığınızdan emin olun.

    Spring Boot 2.x kullanıyorsanız, sürümünü spring-cloud-azure-dependencies olarak 4.20.0 ayarladığınızdan emin olun.

    Bu Ürün Reçetesi (BOM), <dependencyManagement>pom.xml dosyanızın bölümünde yapılandırılmalıdır. 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 bilgiyi, Spring Cloud Azure'ın Hangi Sürümünü Kullanmalıyım bölümüne bakarak edinebilirsiniz.

  • Spring Cloud Azure Service Bus Tümleştirme bileşeni:

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

İleti göndermek ve almak için uygulamayı kodlayın

  1. Aşağıdaki örnekte gösterildiği gibi Service Bus'ınızın ad alanını yapılandırın:

    spring.cloud.azure.servicebus.namespace=<your-servicebus-namespace-name>
    
  2. Aşağıdaki örnekte gösterildiği gibi yeni QueueReceiveConfiguration bir Java sınıfı oluşturun. Bu sınıf, bir ileti alıcısı tanımlamak için kullanılır.

    @Configuration
    public class QueueReceiveConfiguration {
    
        private static final String INPUT_CHANNEL = "queue.input";
        private static final String QUEUE_NAME = "<your-servicebus-queue-name>";
        private static final String SERVICE_BUS_MESSAGE_LISTENER_CONTAINER = "queue-listener-container";
    
        /**
         * This message receiver binding with {@link ServiceBusInboundChannelAdapter}
         * via {@link MessageChannel} has name {@value INPUT_CHANNEL}
         */
        @ServiceActivator(inputChannel = INPUT_CHANNEL)
        public void messageReceiver(byte[] payload) {
            String message = new String(payload);
            System.out.printf("New message received: '%s'%n", message);
        }
    
        @Bean(SERVICE_BUS_MESSAGE_LISTENER_CONTAINER)
        public ServiceBusMessageListenerContainer messageListenerContainer(ServiceBusProcessorFactory processorFactory) {
            ServiceBusContainerProperties containerProperties = new ServiceBusContainerProperties();
            containerProperties.setEntityName(QUEUE_NAME);
            return new ServiceBusMessageListenerContainer(processorFactory, containerProperties);
        }
    
        @Bean
        public ServiceBusInboundChannelAdapter queueMessageChannelAdapter(
            @Qualifier(INPUT_CHANNEL) MessageChannel inputChannel,
            @Qualifier(SERVICE_BUS_MESSAGE_LISTENER_CONTAINER) ServiceBusMessageListenerContainer listenerContainer) {
            ServiceBusInboundChannelAdapter adapter = new ServiceBusInboundChannelAdapter(listenerContainer);
            adapter.setOutputChannel(inputChannel);
            return adapter;
        }
    
        @Bean(name = INPUT_CHANNEL)
        public MessageChannel input() {
            return new DirectChannel();
        }
    }
    
  3. Aşağıdaki örnekte gösterildiği gibi yeni QueueSendConfiguration bir Java sınıfı oluşturun. Bu sınıf, ileti göndereni tanımlamak için kullanılır.

    @Configuration
    public class QueueSendConfiguration {
    
        private static final String OUTPUT_CHANNEL = "queue.output";
        private static final String QUEUE_NAME = "<your-servicebus-queue-name>";
    
        @Bean
        @ServiceActivator(inputChannel = OUTPUT_CHANNEL)
        public MessageHandler queueMessageSender(ServiceBusTemplate serviceBusTemplate) {
            serviceBusTemplate.setDefaultEntityType(ServiceBusEntityType.QUEUE);
            DefaultMessageHandler handler = new DefaultMessageHandler(QUEUE_NAME, serviceBusTemplate);
            handler.setSendCallback(new ListenableFutureCallback<Void>() {
                @Override
                public void onSuccess(Void result) {
                    System.out.println("Message was sent successfully.");
                }
    
                @Override
                public void onFailure(Throwable ex) {
                    System.out.println("There was an error sending the message.");
                }
            });
    
            return handler;
        }
    
        /**
         * Message gateway binding with {@link MessageHandler}
         * via {@link MessageChannel} has name {@value OUTPUT_CHANNEL}
         */
        @MessagingGateway(defaultRequestChannel = OUTPUT_CHANNEL)
        public interface QueueOutboundGateway {
            void send(String text);
        }
    }
    
  4. Aşağıdaki örnekte gösterildiği gibi Spring ile ileti göndermek ve almak için bir göndereni ve alıcıyı bağla:

    @SpringBootApplication
    @EnableIntegration
    @Configuration(proxyBeanMethods = false)
    public class ServiceBusIntegrationApplication {
    
        public static void main(String[] args) {
            ConfigurableApplicationContext applicationContext = SpringApplication.run(ServiceBusIntegrationApplication.class, args);
            QueueSendConfiguration.QueueOutboundGateway outboundGateway = applicationContext.getBean(QueueSendConfiguration.QueueOutboundGateway.class);
            System.out.println("Sending a message to the queue");
            outboundGateway.send("Hello World");
        }
    
    }
    

    İpucu

    Spring Integration altyapısını etkinleştiren @EnableIntegration açıklamayı eklediğinizden emin olun.

  5. Uygulamayı başlatın. Aşağıdaki örneğe benzer günlükler gösterilir:

    Message was sent successfully.
    New message received: 'Hello World'
    

Spring Cloud Stream Service Bus Bağlayıcısı'nı kullanma

Spring Cloud Stream uygulamasında Service Bus API'sini çağırmak için Spring Cloud Azure Service Bus Stream Binder modülünü kullanın.

Bu kılavuzda, Service Bus'a ileti göndermek ve service Bus'tan ileti almak için Spring Cloud Stream Service Bus Binder'ın nasıl kullanılacağı gösterilmektedir.

Service Bus bağımlılığını ekleme

Spring Cloud Azure Service Bus Stream Binder 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>6.0.0</version>
           <type>pom</type>
           <scope>import</scope>
           </dependency>
       </dependencies>
    </dependencyManagement>
    

    Not

    Spring Boot 3.0.x-3.4.x kullanıyorsanız, spring-cloud-azure-dependencies sürümünü 5.23.0 olarak ayarladığınızdan emin olun.

    Spring Boot 2.x kullanıyorsanız, sürümünü spring-cloud-azure-dependencies olarak 4.20.0 ayarladığınızdan emin olun.

    Bu Ürün Reçetesi (BOM), <dependencyManagement>pom.xml dosyanızın bölümünde yapılandırılmalıdır. 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 bilgiyi, Spring Cloud Azure'ın Hangi Sürümünü Kullanmalıyım bölümüne bakarak edinebilirsiniz.

  • Spring Cloud Azure Service Bus Tümleştirme bileşeni:

    <dependency>
      <groupId>com.azure.spring</groupId>
      <artifactId>spring-cloud-azure-stream-binder-servicebus</artifactId>
    </dependency>
    

İleti göndermek ve almak için uygulamayı kodlayın

  1. Aşağıdaki örnekte gösterildiği gibi Service Bus'ınızın ad alanını yapılandırın:

    spring.cloud.azure.servicebus.namespace=<service-bus-namespace-name>
    
  2. İleti alıcısını oluşturun.

    Uygulamanızı olay havuzu olarak kullanmak için aşağıdaki bilgileri belirterek giriş bağlayıcısını yapılandırın:

    • Mesaj işleme mantığını tanımlayan bir Consumer bean tanımlayın. Örneğin, bu Consumer fasulye consume olarak adlandırılır.

      @Bean
      public Consumer<Message<String>> consume() {
          return message -> {
              System.out.printf("New message received: '%s'.%n", message.getPayload());
          };
      }
      
    • Yapılandırmayı ekleyerek, aşağıdaki örnekte gösterildiği gibi yer tutucu queue ile değiştirerek <service-bus-queue-name> kullanımı için adı belirleyin.

      # name for the `Consumer` bean
      spring.cloud.function.definition=consume
      spring.cloud.stream.bindings.consume-in-0.destination=<service-bus-queue-name>
      

      Not

      Service Bus aboneliğinden veri tüketmek için, aşağıdaki örnekte gösterildiği gibi consume-in-0 bağlama özelliklerini değiştirdiğinizden emin olun.

      spring.cloud.stream.bindings.consume-in-0.destination=<service-bus-topic-name>
      spring.cloud.stream.bindings.consume-in-0.group=<service-bus-subscription-name>
      
  3. İletiyi göndereni oluşturun.

    Uygulamanızı olay kaynağı olarak kullanmak için aşağıdaki bilgileri belirterek çıkış bağlayıcısını yapılandırın:

    • uygulamanızın içinden iletilerin nereden geldiğini tanımlayan bir Supplier fasulye tanımlayın.

      @Bean
      return () -> {
              System.out.println("Sending a message.");
              return MessageBuilder.withPayload("Hello world").build();
          };
      }
      
    • Gönderme için queue adını belirtmek üzere aşağıdaki örnekteki <your-servicebus-queue-name> yer tutucusunu değiştirerek yapılandırmayı ekleyin:

      # "consume" is added from the previous step
      spring.cloud.function.definition=consume;supply
      spring.cloud.stream.bindings.supply-out-0.destination=<your-servicebus-queue-name>
      spring.cloud.stream.servicebus.bindings.supply-out-0.producer.entity-type=queue
      

      Not

      Değiştirdiğinizden emin olmak için, bir Service Bus konusu gönderecekseniz, entity-type'yi topic ile değiştirin.

  4. Uygulamayı başlatın. Aşağıdaki örneğe benzer günlükleri görürsünüz:

    Sending a message.
    New message received: 'Hello world'.
    

Azure Spring Apps'e dağıtım yapma

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

Ayrıca bkz.

Microsoft Azure'da kullanılabilen spring boot başlatıcıları hakkında daha fazla bilgi için bkz . Spring Cloud Azure nedir?