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 hızlı başlangıçta, Service Bus kuyruğuna ileti gönderme ve alma ile ilgili basit bir senaryo için adım adım yönergeler sağlanır. Azure Service Bus kuyruğuna ileti göndermek ve bu kuyruktan ileti almak için bir Java uygulaması oluşturursunuz. Azure Service Bus için önceden oluşturulmuş Java örneklerini GitHub'daki Java için Azure SDK deposunda bulabilirsiniz.
İpucu
Spring uygulamasında Azure Service Bus kaynaklarıyla çalışıyorsanız Spring Cloud Azure'ı göz önünde bulundurmanızı öneririz. Spring Cloud Azure, Azure hizmetleriyle sorunsuz Spring tümleştirmesi sağlayan açık kaynak bir projedir. Spring Cloud Azure hakkında daha fazla bilgi edinmek ve Service Bus kullanarak bir örnek görmek için bkz . Azure Service Bus ile Spring Cloud Stream.
Önkoşullar
Azure aboneliği. Bu hızlı başlangıcı tamamlamak için bir Azure hesabınız olmalıdır. Visual Studio aboneleri için Aylık Azure kredilerinizi etkinleştirebilir veya ücretsiz bir hesaba kaydolabilirsiniz.
Java için Azure SDK'sını yükleyin.
- Eclipse kullanıyorsanız, Java için Azure SDK'yı içeren Eclipse için Azure Toolkit'i yükleyebilirsiniz. Daha sonra projenize Java için Microsoft Azure Kitaplıkları'nı ekleyebilirsiniz.
- IntelliJ kullanıyorsanız, IntelliJ için Azure Toolkit'i Yükleme konusuna bakın.
Azure portalında bir ad alanı oluşturma
Azure'da Service Bus mesajlaşma varlıklarını kullanmaya başlamak için, Azure genelinde benzersiz bir ada sahip bir ad alanı oluşturun. Ad alanı, uygulamanızdaki kuyruklar ve başlıklar gibi Service Bus kaynakları için bir kapsam kapsayıcısı sağlar.
Ad alanı oluşturmak için:
Azure Portal’ında oturum açın.
Sol üst kısımdaki açılır menüyü seçin ve Tüm hizmetler sayfasına gidin.
Sol gezinti çubuğunda Tümleştirme'yi seçin.
Mesajlaşma hizmetleri>Service Bus'a gidin ve Oluştur'u seçin.
Ad alanı oluştur sayfasının Temel Bilgiler sekmesinde şu adımları izleyin:
Abonelik için ad alanının oluşturulacağı bir Azure aboneliği seçin.
Kaynak grubu için mevcut bir kaynak grubunu seçin veya yeni bir kaynak grubu oluşturun.
Aşağıdaki adlandırma kurallarına uyan bir Ad Alanı adı girin:
- Adın Azure genelinde benzersiz olması gerekir. Adın kullanılabilirliği sistem tarafından hemen denetlenir.
- Ad uzunluğu en az 6 ve en fazla 50 karakterdir.
- Ad yalnızca harf, sayı, kısa çizgi
-içerebilir. - Ad bir harfle başlamalı ve bir harf veya numarayla bitmelidir.
- İsim
-sbveya-mgmtile bitmiyor.
Konum için ad alanınızı barındıracak bölgeyi seçin.
Fiyatlandırma katmanı için ad alanı için fiyatlandırma katmanını (Temel, Standart veya Premium) seçin. Bu hızlı başlangıç için Standart'ı seçin.
Premium katmanını seçerseniz, ad alanı için coğrafi çoğaltmayı etkinleştirebilirsiniz. Coğrafi çoğaltma özelliği, bir ad alanının meta verilerinin ve verilerinin birincil bölgeden bir veya daha fazla ikincil bölgeye sürekli çoğaltılmasını sağlar.
Önemli
Konuları ve abonelikleri kullanmak istiyorsanız Standart veya Premium'u seçin. Temel fiyatlandırma katmanında konular ve abonelikler desteklenmez.
Premium fiyatlandırma katmanını seçtiyseniz, mesajlaşma birimi sayısını belirtin. Premium katman, her iş yükünün yalıtılmış olarak çalışması için CPU ve bellek düzeyinde kaynak yalıtımı sağlar. Bu kaynak kapsayıcısı mesajlaşma birimi olarak adlandırılır. Premium ad alanında en az bir mesajlaşma birimi vardır. Her Service Bus Premium ad alanı için 1, 2, 4, 8 veya 16 mesajlaşma birimleri seçebilirsiniz. Daha fazla bilgi için bkz. Service Bus premium mesajlaşma katmanı.
Sayfanın alt kısmındaki Gözden geçir ve oluştur'u seçin.
Gözden geçir ve oluştur sayfasında ayarları gözden geçirin ve Oluştur'u seçin.
Kaynağın dağıtımı başarılı olduktan sonra dağıtım sayfasında Kaynağa git'i seçin.
Service Bus ad alanınızın giriş sayfasını görürsünüz.
Azure portalında kuyruk oluşturma
Service Bus Ad Alanı sayfasında, sol taraftaki gezinti menüsünde Varlıklar'ı genişletin ve Kuyruklar'ı seçin.
Kuyruklar sayfasındaki araç çubuğunda + Kuyruk'a tıklayın.
Kuyruk için bir ad girin. Diğer değerleri varsayılan değerleriyle bırakın.
Oluştur'i seçin.
Azure'da uygulamanın kimliğini doğrulama
Bu makalede Azure Service Bus'a bağlanmanın iki yolu gösterilmektedir: parolasız ve bağlantı dizesi.
İlk seçenek, Service Bus ad alanına bağlanmak için Microsoft Entra Id ve rol tabanlı erişim denetiminde (RBAC) güvenlik sorumlunuzu nasıl kullanacağınızı gösterir. Kodunuzda, yapılandırma dosyasında veya Azure Key Vault gibi güvenli bir depolama alanında sabit kodlanmış bir bağlantı dizesi olması konusunda endişelenmeniz gerekmez.
İkinci seçenek, Service Bus ad alanına bağlanmak için bir bağlantı dizesi nasıl kullanacağınızı gösterir. Azure'da yeniyseniz bağlantı dizesi seçeneğini daha kolay takip edebilirsiniz. Gerçek dünyadaki uygulamalarda ve üretim ortamlarında parolasız seçeneği kullanmanızı öneririz. Daha fazla bilgi için bkz. Service Bus kimlik doğrulaması ve yetkilendirmesi. Parolasız kimlik doğrulaması hakkında daha fazla bilgi için bkz. .NET uygulamalarının kimliğini doğrulama.
Microsoft Entra kullanıcınıza rol atama
Yerel olarak geliştirirken, Azure Service Bus'a bağlanan kullanıcı hesabının doğru izinlere sahip olduğundan emin olun. İleti göndermek ve almak için Azure Service Bus Veri Sahibi rolüne ihtiyacınız vardır. Kendinize bu rolü atamak için Kullanıcı Erişimi Yöneticisi rolüne veya eylemi içeren Microsoft.Authorization/roleAssignments/write başka bir role ihtiyacınız vardır.
Azure portalı, Azure CLI veya Azure PowerShell'i kullanarak kullanıcıya Azure RBAC rolleri atayabilirsiniz. Rol atamaları için kullanılabilir kapsamlar hakkında daha fazla bilgi edinmek için bkz. Azure RBAC kapsamını anlama.
Aşağıdaki örnekte, Azure Service Bus kaynaklarına tam erişim sağlayan Azure Service Bus Data Owner rolü, kullanıcı hesabınıza atanır. Gerçek bir senaryoda, kullanıcılara yalnızca daha güvenli bir üretim ortamı için gereken minimum izinleri vermek için en düşük ayrıcalık ilkesini izleyin.
Azure Service Bus için Azure yerleşik rolleri
Azure Service Bus için, Azure portalı ve Azure kaynak yönetimi API'sini kullanarak ad alanlarının ve tüm ilgili kaynakların yönetimi Azure RBAC modeli kullanılarak zaten korunur. Azure, Service Bus ad alanına erişim yetkisi vermek için aşağıdaki Azure yerleşik rollerini sağlar:
- Azure Service Bus Veri Yöneticisi: Kuyruklar, konular, abonelikler ve filtreler dahil olmak üzere, Service Bus ad alanı ve varlıklarına veri erişimini etkinleştirir. Bu rolün bir üyesi kuyruklardan veya konu başlıklarından/aboneliklerden ileti gönderip alabilir.
-
Azure Service Bus Veri Gönderen:
send'e, Service Bus ad alanı ve varlıklarına erişim vermek için bu rolü kullanın. - Azure Service Bus Veri Alıcısı: Service Bus ad alanına ve onun varlıklarına erişim vermek için bu rolü kullanın.
Özel bir rol oluşturmak istiyorsanız Service Bus işlemleri için gereken haklar'a bakın.
Microsoft Entra kullanıcısını Azure Service Bus Sahibi rolüne ekleme
Microsoft Entra kullanıcı adınızı Service Bus ad alanı düzeyinde Azure Service Bus Veri Sahibi rolüne ekleyin. Bu yapılandırma, kullanıcı hesabınız bağlamında çalışan bir uygulamanın kuyruğa veya konuya ileti göndermesine olanak tanır. Bir kuyruktan veya konu aboneliğinden mesaj alabilir.
Önemli
Çoğu durumda rol atamasının Azure'a yayılması bir veya iki dakika sürer. Nadir durumlarda, sekiz dakikaya kadar sürebilir. Kodunuzu ilk kez çalıştırdığınızda kimlik doğrulama hataları alıyorsanız, birkaç dakika bekleyin ve yeniden deneyin.
Azure portalında Service Bus Ad Alanı sayfanız açık değilse ana arama çubuğunu veya sol gezintiyi kullanarak Service Bus ad alanınızı bulun.
Genel Bakış sayfasında, sol taraftaki menüden Erişim denetimi (IAM) öğesini seçin.
Erişim denetimi (IAM) sayfasında Rol atamaları sekmesini seçin.
Üst menüden + Ekle'yi ve ardından Rol ataması ekle'yi seçin.
Sonuçları istenen role göre filtrelemek için arama kutusunu kullanın. Bu örnek için eşleşen sonucu arayın
Azure Service Bus Data Ownerve seçin. Ardından İleri'yi seçin.Erişimi Şuraya Ata altında, Kullanıcı, grup veya hizmet sorumlusunu seçin ve ardından + Üye Seç öğesini seçin.
İletişim kutusunda Microsoft Entra kullanıcı adınızı (genellikle user@domain e-posta adresiniz) arayın ve iletişim kutusunun alt kısmındaki Seç'i seçin.
İşlemi tamamlamak için son sayfaya gitmek üzere Gözden geçir + ata'yı seçin, ardından Gözden geçir + ata'yı tekrar seçin.
Kuyruğa ileti gönderme
Bu bölümde bir Java konsol projesi oluşturacak ve daha önce oluşturduğunuz kuyruğa ileti göndermek için kod ekleyebilirsiniz.
Java konsol projesi oluşturma
Eclipse'i veya seçtiğiniz bir aracı kullanarak bir Java projesi oluşturun.
Uygulamanızı Service Bus kullanacak şekilde yapılandırma
Azure Core ve Azure Service Bus kitaplıklarına referanslar ekleyin.
Eclipse kullanıyorsanız ve bir Java konsol uygulaması oluşturduysanız Java projenizi Maven'a dönüştürün: Paket Gezgini penceresinde projeye sağ tıklayın. Maven projesine Dönüştürmeyi Yapılandır'ı> seçin. Ardından, aşağıdaki örnekte gösterildiği gibi bu iki kitaplıkta bağımlılıkları ekleyin.
pom.xml Azure Service Bus ve Azure Identity paketlerine bağımlılık eklemek için dosyayı güncelleştirin.
<dependencies>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-messaging-servicebus</artifactId>
<version>7.13.3</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>1.8.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
Kuyruğa ileti göndermek için kod ekleme
Java dosyasının konusuna aşağıdaki
importdeyimleri ekleyin.import com.azure.messaging.servicebus.*; import com.azure.identity.*; import java.util.concurrent.TimeUnit; import java.util.Arrays; import java.util.List;sınıfında, bağlantı dizesini ve kuyruk adını tutacak değişkenleri tanımlayın.
static String queueName = "<QUEUE NAME>";Önemli
yerine
<QUEUE NAME>kuyruğun adını yazın.Kuyruğa bir ileti göndermek için sınıfında adlı
sendMessagebir yöntem ekleyin.Önemli
NAMESPACENAMEyerine Service Bus ad alanınızın adını yazdığınızdan emin olun.static void sendMessage() { // create a token using the default Azure credential DefaultAzureCredential credential = new DefaultAzureCredentialBuilder() .build(); ServiceBusSenderClient senderClient = new ServiceBusClientBuilder() .fullyQualifiedNamespace("NAMESPACENAME.servicebus.windows.net") .credential(credential) .sender() .queueName(queueName) .buildClient(); // send one message to the queue senderClient.sendMessage(new ServiceBusMessage("Hello, World!")); System.out.println("Sent a single message to the queue: " + queueName); }İleti listesi oluşturmak için sınıfına adlı
createMessagesbir yöntem ekleyin. Genellikle bu iletileri uygulamanızın farklı bölümlerinden alırsınız. Bu örnekte örnek iletilerin listesini kullanırsınız.static List<ServiceBusMessage> createMessages() { // create a list of messages and return it to the caller ServiceBusMessage[] messages = { new ServiceBusMessage("First message"), new ServiceBusMessage("Second message"), new ServiceBusMessage("Third message") }; return Arrays.asList(messages); }Oluşturduğunuz kuyruğa ileti göndermek için method adlı
sendMessageBatchbir yöntem ekleyin. Bu yöntem, kuyruk için birServiceBusSenderClientoluşturur, mesaj listesini almak amacıylacreateMessagesyöntemini çağırır, bir veya daha fazla toplu iş hazırlar ve bu toplu işleri kuyruğa gönderir.Önemli
NAMESPACENAMEyerine Service Bus ad alanınızın adını yazdığınızdan emin olun.static void sendMessageBatch() { // create a token using the default Azure credential DefaultAzureCredential credential = new DefaultAzureCredentialBuilder() .build(); ServiceBusSenderClient senderClient = new ServiceBusClientBuilder() .fullyQualifiedNamespace("NAMESPACENAME.servicebus.windows.net") .credential(credential) .sender() .queueName(queueName) .buildClient(); // Creates an ServiceBusMessageBatch where the ServiceBus. ServiceBusMessageBatch messageBatch = senderClient.createMessageBatch(); // create a list of messages List<ServiceBusMessage> listOfMessages = createMessages(); // We try to add as many messages as a batch can fit based on the maximum size and send to Service Bus when // the batch can hold no more messages. Create a new batch for next set of messages and repeat until all // messages are sent. for (ServiceBusMessage message : listOfMessages) { if (messageBatch.tryAddMessage(message)) { continue; } // The batch is full, so we create a new batch and send the batch. senderClient.sendMessages(messageBatch); System.out.println("Sent a batch of messages to the queue: " + queueName); // create a new batch messageBatch = senderClient.createMessageBatch(); // Add that message that we couldn't before. if (!messageBatch.tryAddMessage(message)) { System.err.printf("Message is too large for an empty batch. Skipping. Max size: %s.", messageBatch.getMaxSizeInBytes()); } } if (messageBatch.getCount() > 0) { senderClient.sendMessages(messageBatch); System.out.println("Sent a batch of messages to the queue: " + queueName); } //close the client senderClient.close(); }
Kuyruktan ileti alma
Bu bölümde, kuyruktan iletileri almak için kod ekleyebilirsiniz.
Kuyruktan ileti almak için adlı
receiveMessagesbir yöntem ekleyin. Bu yöntem, iletileri işlemek için bir işleyici ve hataları işlemek için başka bir işleyici belirterek kuyruk için birServiceBusProcessorClientoluşturur. Ardından işlemciyi başlatır, birkaç saniye bekler, alınan iletileri yazdırır ve ardından işlemciyi durdurup kapatır.Önemli
-
NAMESPACENAMEyerine Service Bus ad alanınızın adını yazdığınızdan emin olun.
// handles received messages static void receiveMessages() throws InterruptedException { DefaultAzureCredential credential = new DefaultAzureCredentialBuilder() .build(); ServiceBusProcessorClient processorClient = new ServiceBusClientBuilder() .fullyQualifiedNamespace("NAMESPACENAME.servicebus.windows.net") .credential(credential) .processor() .queueName(queueName) .processMessage(context -> processMessage(context)) .processError(context -> processError(context)) .buildProcessorClient(); System.out.println("Starting the processor"); processorClient.start(); TimeUnit.SECONDS.sleep(10); System.out.println("Stopping and closing the processor"); processorClient.close(); }-
Service Bus aboneliğinden alınan bir iletiyi işlemek için
processMessageyöntemini ekleyin.private static void processMessage(ServiceBusReceivedMessageContext context) { ServiceBusReceivedMessage message = context.getMessage(); System.out.printf("Processing message. Session: %s, Sequence #: %s. Contents: %s%n", message.getMessageId(), message.getSequenceNumber(), message.getBody()); }processErrorHata iletilerini işlemek için yöntemini ekleyin.private static void processError(ServiceBusErrorContext context) { System.out.printf("Error when receiving messages from namespace: '%s'. Entity: '%s'%n", context.getFullyQualifiedNamespace(), context.getEntityPath()); if (!(context.getException() instanceof ServiceBusException)) { System.out.printf("Non-ServiceBusException occurred: %s%n", context.getException()); return; } ServiceBusException exception = (ServiceBusException) context.getException(); ServiceBusFailureReason reason = exception.getReason(); if (reason == ServiceBusFailureReason.MESSAGING_ENTITY_DISABLED || reason == ServiceBusFailureReason.MESSAGING_ENTITY_NOT_FOUND || reason == ServiceBusFailureReason.UNAUTHORIZED) { System.out.printf("An unrecoverable error occurred. Stopping processing with reason %s: %s%n", reason, exception.getMessage()); } else if (reason == ServiceBusFailureReason.MESSAGE_LOCK_LOST) { System.out.printf("Message lock lost for message: %s%n", context.getException()); } else if (reason == ServiceBusFailureReason.SERVICE_BUSY) { try { // Choosing an arbitrary amount of time to wait until trying again. TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { System.err.println("Unable to sleep for period of time"); } } else { System.out.printf("Error source %s, reason %s, message: %s%n", context.getErrorSource(), reason, context.getException()); } }mainyöntemini,sendMessage,sendMessageBatchvereceiveMessagesyöntemlerini çağırmak veInterruptedExceptionfırlatmak için güncelleyin.public static void main(String[] args) throws InterruptedException { sendMessage(); sendMessageBatch(); receiveMessages(); }
Uygulamayı çalıştırma
Eclipse kullanıyorsanız projeye sağ tıklayın, Dışarı Aktar'ı seçin, Java'yı genişletin, Çalıştırılabilir JAR dosyası'nı seçin ve çalıştırılabilir jar dosyası oluşturmak için adımları izleyin.
Azure Service Bus Veri Sahibi rolüne eklediğiniz hesaptan farklı bir kullanıcı hesabı altında oturum açtıysanız aşağıdaki adımları izleyin. Aksi takdirde, sonraki adımda Jar dosyasını çalıştırmak için devam edin.
Makinenize Azure CLI yükleyin.
Azure'da oturum açmak için aşağıdaki CLI komutunu çalıştırın. Azure Service Bus Veri Sahibi rolüne eklediğiniz kullanıcı hesabını kullanın.
az login
Aşağıdaki komutu kullanarak Jar dosyasını çalıştırın.
java -jar <JAR FILE NAME>Konsol penceresinde aşağıdaki çıkışı görürsünüz.
Sent a single message to the queue: myqueue Sent a batch of messages to the queue: myqueue Starting the processor Processing message. Session: 88d961dd801f449e9c3e0f8a5393a527, Sequence #: 1. Contents: Hello, World! Processing message. Session: e90c8d9039ce403bbe1d0ec7038033a0, Sequence #: 2. Contents: First message Processing message. Session: 311a216a560c47d184f9831984e6ac1d, Sequence #: 3. Contents: Second message Processing message. Session: f9a871be07414baf9505f2c3d466c4ab, Sequence #: 4. Contents: Third message Stopping and closing the processor
Azure portalındaki Service Bus ad alanının Genel Bakış sayfasında, gelen ve giden ileti sayısını görebilirsiniz. Bir dakika kadar bekleyin ve en son değerleri görmek için sayfayı yenileyin.
Bu Genel Bakış sayfasındaki kuyruğu seçerek Service Bus Kuyruğu sayfasına gidin. Bu sayfada gelen ve giden ileti sayısını da görürsünüz. Ayrıca kuyruğun geçerli boyutu ve en büyük boyut, etkin ileti sayısı gibi diğer bilgileri de görürsünüz.
İlgili içerik
Aşağıdaki belgelere ve örneklere bakın: