Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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:
Spring Cloud Azure Service Bus Starter , Spring Boot özelliklerine sahip Service Bus Java SDK istemci kitaplığı ile ileti gönderip almanızı sağlar.
Spring Cloud Azure Service Bus JMS Starter , Service Bus kuyrukları ve konu başlıkları/abonelikleri ile ileti göndermek ve almak için JMS API'sini kullanmanıza olanak tanır.
Spring Messaging Azure Service Bus, Spring Messaging API'sini kullanarak Service Bus ile etkileşim kurmanızı sağlar.
Spring Integration Azure Service Bus , Spring Integration Message Channels ile Service Bus arasında bağlantı kurmanızı sağlar.
Service Bus için Spring Cloud Stream Binder, Service Bus'ı Spring Cloud Stream uygulamalarında mesajlaşma ara yazılımı olarak kullanmanızı sağlar.
Önkoşullar
- Azure aboneliği - ücretsiz bir abonelik oluşturun.
- Java Development Kit (JDK) sürüm 8 veya üzeri.
- Apache Maven, sürüm 3.0 veya üzeri.
- Azure Service Bus ve bununla ilişkili bir kuyruk veya konu/abonelik. Bir kuyruğunuz yoksa bir Service Bus kuyruğu veya konu başlığı oluşturun. Daha fazla bilgi için Azure portalını kullanarak bir Service Bus ad alanı ve kuyruk oluşturma veya Azure portalını kullanarak bir Service Bus konusu ve konuya abonelikler oluşturma konularına bakınız.
- Spring Boot uygulamanız yoksa Spring Initializr ile bir Maven projesi oluşturun. Maven Projesi'ni seçtiğinizden ve Bağımlılıklar'ın altında Spring Web bağımlılığını eklediğinizden ve ardından Java sürüm 8 veya üzerini seçtiğinizden emin olun.
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-dependenciessürümünü5.23.0olarak ayarladığınızdan emin olun.Spring Boot 2.x kullanıyorsanız, sürümünü
spring-cloud-azure-dependenciesolarak4.20.0ayarladığı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:
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 veentity-typedeğerinitopicolarak değiştirmeniz gerekir.Aşağıdaki örnekte gösterildiği gibi yeni
ServiceBusProcessorClientConfigurationbir Java sınıfı oluşturun. Bu sınıf, iletisini ve hata işleyicisiniServiceBusProcessorClientkaydetmek 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()); }; } }ServiceBusSenderClientAş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ınspring.cloud.azure.servicebus.processor.auto-startup=false.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:
Aşağıdaki örnekte gösterildiği gibi yeni
ServiceBusClientConfigurationbir Java sınıfı oluşturun. Bu sınıf,ServiceBusSenderClientveServiceBusProcessorClientbean'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.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(); } }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-dependenciessürümünü5.23.0olarak ayarladığınızdan emin olun.Spring Boot 2.x kullanıyorsanız, sürümünü
spring-cloud-azure-dependenciesolarak4.20.0ayarladığı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
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>İ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
Usertanı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
Serializableiçindesendyöntemini kullanmak içinJmsTemplateuygulanmıştır. Aksi takdirde, içeriği metin biçiminde JSON'a seri hale getirmek için özelleştirilmişMessageConverterbir fasulye tanımlamanız gerekir.MessageConverterhakkında daha fazla bilgi için resmi Spring JMS Starter projesine bakın.Buradan, aşağıdaki örnekte gösterildiği gibi yeni
QueueReceiveServicebir 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
destinationkonu adı olarak değiştirin vecontainerFactoryparametresi olmalıdırtopicJmsListenerContainerFactory. Ayrıca, abonelik adını açıklamak için parametresini ekleyinsubscription.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
@EnableIntegrationek açıklamasını eklediğinizden emin olun, bu da@JmsListenerek açıklamasıyla belirtilmiş olan yöntemlerin keşfini tetikleyerek, arka planda ileti dinleyici kapsayıcısını oluşturur.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-dependenciessürümünü5.23.0olarak ayarladığınızdan emin olun.Spring Boot 2.x kullanıyorsanız, sürümünü
spring-cloud-azure-dependenciesolarak4.20.0ayarladığı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
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=queueNot
Konu/abonelik kullanıyorsanız
spring.cloud.azure.servicebus.entity-typedeğerinitopicolarak değiştirin.Aşağıdaki örnekte gösterildiği gibi yeni
ConsumerServicebir 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,
destinationparametresini konu adı olarak değiştirin ve abonelik adını açıklamak içingroupparametresini ekleyin.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
@EnableAzureMessagingek açıklamasını eklediğinizden emin olun, bu da@ServiceBusListenerek açıklamasıyla belirtilmiş olan yöntemlerin keşfini tetikleyerek, arka planda ileti dinleyici kapsayıcısını oluşturur.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-dependenciessürümünü5.23.0olarak ayarladığınızdan emin olun.Spring Boot 2.x kullanıyorsanız, sürümünü
spring-cloud-azure-dependenciesolarak4.20.0ayarladığı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
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>Aşağıdaki örnekte gösterildiği gibi yeni
QueueReceiveConfigurationbir 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(); } }Aşağıdaki örnekte gösterildiği gibi yeni
QueueSendConfigurationbir 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); } }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
@EnableIntegrationaçıklamayı eklediğinizden emin olun.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-dependenciessürümünü5.23.0olarak ayarladığınızdan emin olun.Spring Boot 2.x kullanıyorsanız, sürümünü
spring-cloud-azure-dependenciesolarak4.20.0ayarladığı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
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>İ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
Consumerbean tanımlayın. Örneğin, buConsumerfasulyeconsumeolarak 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
queueile 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-0bağ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>
İ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
Supplierfasulye tanımlayın.@Bean return () -> { System.out.println("Sending a message."); return MessageBuilder.withPayload("Hello world").build(); }; }Gönderme için
queueadı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=queueNot
Değiştirdiğinizden emin olmak için, bir Service Bus konusu gönderecekseniz,
entity-type'yitopicile değiştirin.
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?