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şturulmuş Java uygulamalarda Azure Service Bus nasıl kullanılacağı gösterilmektedir.
Azure, Gelişimli İ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. desteklenen Azure platformları aralığında Service Bus kullanabilirsiniz.
Spring Cloud Azure, Spring çerçevelerini kullanarak Service Bus queues ve topics/subscriptions ileti göndermek ve 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ığıyla ileti gönderip almanızı sağlar.
Spring Cloud Azure Service Bus JMS Starter JMS API'sini kullanarak Service Bus kuyrukları ve konuları/aboneliklerini içeren iletiler gönderip almanızı sağlar.
Spring Messaging Azure Service BusSpring Messaging API aracılığıyla Service Bus etkileşim kurmanızı sağlar.
Spring Integration Azure Service Bus Spring Integration Message Channels ile Service Bus bağlamanızı sağlar.
Spring Cloud Stream Binder for Service Bus, Spring Cloud Stream uygulamalarında mesajlaşma ara yazılımı olarak Service Bus kullanmanızı sağlar.
Önkoşullar
- Azure aboneliği - ücretsiz bir abonelik .
- Java Geliştirme Seti (JDK) sürüm 8 veya üzeri.
- Apache Maven, sürüm 3.0 veya üzeri.
- Bir Azure Service Bus ve Kuyruk veya Konu/Abonelik. Bir kuyruğunuz yoksa bir Service Bus kuyruğu veya konu başlığı oluşturun. Daha fazla bilgi için bkz. Service Bus ad alanı ve kuyruk oluşturmak için Azure portalını kullanma veya Konu başlığı ve abonelikleri oluşturmak için Azure Service Bus portalını kullanma.
- Spring Boot uygulamanız yoksa Spring Initializr ile bir Maven projesi oluşturun. Maven Project öğesini seçtiğinizden emin olun ve Dependencies altında Spring Web bağımlılığını ekleyin ve ardından Java sürüm 8 veya üzerini seçin.
Not
Hesabınıza Service Bus kaynaklarınıza erişim sağlamak için, yeni oluşturduğunuz Azure Service Bus ad alanında mevcut Microsoft Entra hesabınıza Azure Service Bus Veri Gönderen ve Azure Service Bus Veri Alıcısı rollerini atayın. Daha fazla bilgi için bkz. Azure portalını 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 Kimliği 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ığı DefaultAzureCredential kullanır.
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 Authenticate Azure barındırılan Java uygulamalarınınDefaultAzureCredential 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 DefaultAzureCredential desteklememektedir. Service Bus ile Spring JMS kullanıyorsanız bu adımı atlayın.
Spring Cloud Azure Service Bus Starter'ı kullanarak
Spring Cloud Azure Service Bus Starter modülü Spring Boot çerçevesiyle Service Bus Java istemci kitaplığı içeri aktarır. Spring Cloud Azure ve Azure SDK birlikte, birbirini dışlayan olmayan bir düzende 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>7.2.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Not
Spring Boot 4.0.x kullanıyorsanız,
spring-cloud-azure-dependenciessürümünü7.2.0olarak ayarladığınızdan emin olun.Spring Boot 3.5.x kullanıyorsanız,
spring-cloud-azure-dependenciessürümünü6.2.0olarak ayarladığınızdan emin olun.Spring Boot 3.1.x-3.5.x kullanıyorsanız,
spring-cloud-azure-dependenciessürümünü5.25.0olarak ayarladığınızdan emin olun.Eğer Spring Boot 2.x kullanıyorsanız,
spring-cloud-azure-dependenciessürümünü4.20.0olarak ayarladığınızdan emin olun.Bu Parça Listesi (BOM),
<dependencyManagement>bölümünde pom.xml dosyanızda 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 bilgi için bkz: Hangi Spring Cloud Azure Sürümünü Kullanmalıyım.
Spring Cloud Azure Service Bus yapıtı:
<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 istemcilerle 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, Service Bus ile etkileşim kuracak 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 iletileri göndermek ve 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 kullanacağız. 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 bir
ServiceBusProcessorClientConfigurationJava 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 bir
ServiceBusClientConfigurationJava 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
<service-bus-fully-qualified-namespace>yer tutucusunun yerine Azure portalındaki Service Bus ana bilgisayar adınızı değiştirmeyi unutmayın.<service-bus-queue-name>yer tutucuyu 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, bean'leri 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ı Azure Hizmet SDK'ları için Global yapılandırması bölümüne bakın.
- Proxy ayarları.
- Yeniden deneme seçenekleri.
- AMQP aktarım istemcisi seçenekleri.
Ayrıca farklı Azure bulutlara 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 Spring JMS uygulamalarını JMS 2.0 kullanarak Azure Service Bus ile tümleştirme açıklanmaktadır.
Bu kılavuzda, Service Bus'a ileti göndermek ve bu api'den ileti almak için JMS API için 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>7.2.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Not
Spring Boot 4.0.x kullanıyorsanız,
spring-cloud-azure-dependenciessürümünü7.2.0olarak ayarladığınızdan emin olun.Spring Boot 3.5.x kullanıyorsanız,
spring-cloud-azure-dependenciessürümünü6.2.0olarak ayarladığınızdan emin olun.Spring Boot 3.1.x-3.5.x kullanıyorsanız,
spring-cloud-azure-dependenciessürümünü5.25.0olarak ayarladığınızdan emin olun.Eğer Spring Boot 2.x kullanıyorsanız,
spring-cloud-azure-dependenciessürümünü4.20.0olarak ayarladığınızdan emin olun.Bu Parça Listesi (BOM),
<dependencyManagement>bölümünde pom.xml dosyanızda 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 bilgi için bkz: Hangi Spring Cloud Azure Sürümünü Kullanmalıyım.
Spring Cloud Azure Service Bus JMS bileşeni
<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 için bağlantı dizesini 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 bir
QueueReceiveServiceJava 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 tutucu olan
<service-bus-queue-name>'yi, Service Bus ad alanınızda yapılandırdığınız kendi kuyruk adınızla değiştirdiğinizden emin olun.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
<service-bus-queue-name>yer tutucusunu Service Bus ad alanınızda yapılandırılmış olan kendi kuyruk adınızla değiştirin.İ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. JMS API'sini Service Bus ve AMQP 1.0 ile kullanma.
Spring Messaging Azure Service Bus kullanımı
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 konularına eş zamansız ve eş zamanlı olarak mesaj gönderin. -
@ServiceBusListener: Hedefte bir Service Bus ileti dinleyicisinin hedefi olarak bir yöntemi işaretleyin.
Bu kılavuzda, spring messaging Azure Service Bus kullanarak Service Bus iletileri gönderme ve alma hakkında bilgi edinebilirsiniz.
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>7.2.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Not
Spring Boot 4.0.x kullanıyorsanız,
spring-cloud-azure-dependenciessürümünü7.2.0olarak ayarladığınızdan emin olun.Spring Boot 3.5.x kullanıyorsanız,
spring-cloud-azure-dependenciessürümünü6.2.0olarak ayarladığınızdan emin olun.Spring Boot 3.1.x-3.5.x kullanıyorsanız,
spring-cloud-azure-dependenciessürümünü5.25.0olarak ayarladığınızdan emin olun.Eğer Spring Boot 2.x kullanıyorsanız,
spring-cloud-azure-dependenciessürümünü4.20.0olarak ayarladığınızdan emin olun.Bu Parça Listesi (BOM),
<dependencyManagement>bölümünde pom.xml dosyanızda 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 bilgi için bkz: Hangi Spring Cloud Azure Sürümünü Kullanmalıyım.
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 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 bir
ConsumerServiceJava 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ız ve Service Bus arasında yönlendirebilirsiniz.
Gelen kanal adaptörü, iletileri bir Service Bus kuyruğundan veya aboneliğinden ileti kanalına yönlendirir. Giden kanal bağdaştırıcısı, ileti kanalındaki iletileri bir Service Bus kuyruğuna ve konusuna yayımlar.
Bu kılavuzda, Service Bus iletileri göndermek ve 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>7.2.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Not
Spring Boot 4.0.x kullanıyorsanız,
spring-cloud-azure-dependenciessürümünü7.2.0olarak ayarladığınızdan emin olun.Spring Boot 3.5.x kullanıyorsanız,
spring-cloud-azure-dependenciessürümünü6.2.0olarak ayarladığınızdan emin olun.Spring Boot 3.1.x-3.5.x kullanıyorsanız,
spring-cloud-azure-dependenciessürümünü5.25.0olarak ayarladığınızdan emin olun.Eğer Spring Boot 2.x kullanıyorsanız,
spring-cloud-azure-dependenciessürümünü4.20.0olarak ayarladığınızdan emin olun.Bu Parça Listesi (BOM),
<dependencyManagement>bölümünde pom.xml dosyanızda 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 bilgi için bkz: Hangi Spring Cloud Azure Sürümünü Kullanmalıyım.
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 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 bir
QueueReceiveConfigurationJava 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 bir
QueueSendConfigurationJava 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 iletileri göndermek ve almak için Spring Cloud Stream Service Bus Bağlayıcısı'nı nasıl kullanacağınız 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>7.2.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Not
Spring Boot 4.0.x kullanıyorsanız,
spring-cloud-azure-dependenciessürümünü7.2.0olarak ayarladığınızdan emin olun.Spring Boot 3.5.x kullanıyorsanız,
spring-cloud-azure-dependenciessürümünü6.2.0olarak ayarladığınızdan emin olun.Spring Boot 3.1.x-3.5.x kullanıyorsanız,
spring-cloud-azure-dependenciessürümünü5.25.0olarak ayarladığınızdan emin olun.Eğer Spring Boot 2.x kullanıyorsanız,
spring-cloud-azure-dependenciessürümünü4.20.0olarak ayarladığınızdan emin olun.Bu Parça Listesi (BOM),
<dependencyManagement>bölümünde pom.xml dosyanızda 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 bilgi için bkz: Hangi Spring Cloud Azure Sürümünü Kullanmalıyım.
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 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, aşağıdakiConsumerfasulyeye şöyle bir isim verilmiştir:consume@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 kullanmak 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
Service Bus konu başlığına göndermek için
entity-typetopicolarak değiştirdiğinizden emin olun.
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 Spring Boot uygulamalarını kod değişikliği olmadan Azure 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 dağıtmak için bkz. İlk uygulamanızı Azure Spring Apps'a dağıtma.
Sonraki adımlar
Spring geliştiricileri için AzureSpring Cloud Azure Service Bus Örnekleri
Ayrıca bkz.
Microsoft Azure için kullanılabilen spring boot başlatıcıları hakkında daha fazla bilgi için bkz. Spring Cloud Azure nedir?