Kullanmaya başlayın kuyrukları Service Bus (.NET)
Bu hızlı başlangıçta aşağıdaki adımları gerçekleştirebilirsiniz:
- Azure portalı ile Service Bus ad alanı oluşturma.
- Azure portalını kullanarak Service Bus kuyruğu oluşturma.
- Sıraya bir dizi ileti göndermek için bir .NET Core konsol uygulaması yazın.
- Bu iletileri kuyruktan almak için bir .NET Core konsol uygulaması yazın.
Not
Bu hızlı başlangıç, bir iş kuyruğuna toplu ileti gönderme ve ardından bunları alma ile ilgili basit bir senaryoyu Service Bus adım yönergeler sağlar. Diğer ve gelişmiş senaryolar hakkında daha fazla örnek için bkz. Service Bus .NET örnekleri GitHub.
Önkoşullar
Hizmette yeniysiniz, bu hızlı Service Bus önce genel bakış'a bakın.
- Azure aboneliği. Azure Service Bus dahil olmak üzere Azure hizmetlerini kullanmak için bir aboneliğe ihtiyacınız vardır. Mevcut bir Azure hesabınız yoksa ücretsiz deneme sürümüne kaydolabilirsiniz.
- Microsoft Visual Studio 2019. Azure Service Bus istemci kitaplığı, C# 8.0'da tanıtıldı yeni özellikleri kullanır. Kitaplığı önceki C# dil sürümleriyle kullanmaya devam edin, ancak yeni söz dizimi kullanılamaz. Tam söz diziminin kullanılması için, 3.0 veya .NET Core SDK ve dil sürümü olarak ayarlanmış şekilde derlemenizi
latestöneririz. Visual Studio kullanıyorsanız, Visual Studio 2019'dan önceki sürümler C# 8.0 projeleri oluşturmak için gereken araçlarla uyumlu değildir.
Azure portalında bir ad alanı oluşturma
Azure'da Service Bus mesajlaşma varlıklarını kullanmaya başlamak için öncelikle Azure'da benzersiz olan bir ad alanı oluşturmanız gerekir. Ad alanı, uygulamanızda bulunan Service Bus kaynaklarını adreslemek için içeriğin kapsamını belirleyen bir kapsayıcı sunar.
Ad alanı oluşturmak için:
Azure portalda oturum açma
Portalın sol gezinti bölmesinde + kaynak oluştur' u seçin, tümleştirme' i seçin ve ardından Service Bus' yi seçin.
Ad alanı oluştur sayfasının temel bilgiler etiketinde şu adımları izleyin:
Abonelik için, ad alanını oluşturmak Için bir Azure aboneliği seçin.
Kaynak grubu için, ad alanının etkin olacağı mevcut bir kaynak grubunu seçin veya yeni bir tane oluşturun.
Ad alanı için bir ad girin. Adın kullanılabilirliği sistem tarafından hemen kontrol edilir. Ad alanlarını adlandırma kurallarının bir listesi için bkz. Create Namespace REST API.
Konum için, ad alanınızı barındırılacak 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.
Konuları ve aboneliklerikullanmak Istiyorsanız, standart veya Premium birini seçin. Konular/abonelikler temel fiyatlandırma katmanında 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ımda ç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 bir Service Bus Premium ad alanı için 1, 2 veya 4 mesajlaşma birimi seçebilirsiniz. daha fazla bilgi için bkz. Service Bus Premium mesajlaşma.
Gözden geçir ve oluştur’u seçin. Artık sistem ad alanınızı oluşturur ve kullanıma açar. Sistem, hesabınıza yönelik kaynakları sağlarken birkaç dakika beklemeniz gerekebilir.
Gözden geçir + oluştur sayfasında ayarları gözden geçirin ve Oluştur' u seçin.
Dağıtım sayfasında Kaynağa Git ' i seçin.
Service Bus ad alanınız için ana sayfayı görürsünüz.
Bağlantı dizesini alma
Yeni bir ad alanı oluşturmak, birincil ve ikincil anahtarlarla otomatik olarak bir ilk paylaşılan erişim Imzası (SAS) ilkesi oluşturur ve her birinin ad alanının tüm yönleri üzerinde tam denetim izni veren birincil ve ikincil bağlantı dizelerine sahiptir. düzenli gönderenler ve alıcılar için daha kısıtlanmış haklara sahip kurallar oluşturma hakkında bilgi için bkz. Service Bus kimlik doğrulaması ve yetkilendirme .
Ad alanınız için birincil bağlantı dizesini kopyalamak için aşağıdaki adımları izleyin:
Service Bus ad alanı sayfasında sol menüdeki paylaşılan erişim ilkeleri ' ni seçin.
Paylaşılan erişim ilkeleri sayfasında RootManageSharedAccessKey' yi seçin.
İlke: RootManageSharedAccessKey penceresinde, birincil bağlantı dizesi' nin yanındaki Kopyala düğmesine tıklayın ve bağlantı dizesini daha sonra kullanmak üzere panonuza kopyalayın. Bu değeri Not Defteri veya başka bir geçici konuma yapıştırın.
Bu sayfayı birincil anahtar, ikincil anahtar ve ikincil bağlantı dizesini kopyalamak için kullanabilirsiniz.
Kuyruk oluşturma Azure portal
Ad Alanı Service Bus sol gezinti menüsünde Kuyruklar'ı seçin.
Kuyruklar sayfasında, araç çubuğunda + Kuyruk'a tıklayın.
Kuyruk için bir ad girin ve diğer değerleri varsayılan değerlerinde bırakın.
Şimdi Oluştur'a seçin.
Kuyruğa ileti gönderme
Bu bölümde, bir ağ kuyruğuna ileti göndermek için bir .NET Core konsol Service Bus gösterir.
Not
Bu hızlı başlangıç, bir iş kuyruğuna toplu ileti gönderme ve ardından bunları alma ile ilgili basit bir senaryoyu Service Bus adım yönergeler sağlar. Diğer ve gelişmiş senaryolar hakkında daha fazla örnek için bkz. Service Bus .NET örnekleri GitHub.
Konsol uygulaması oluşturma
Visual Studio 2019’u başlatın.
Yeni proje oluştur'a seçin.
Yeni proje oluştur iletişim kutusunda aşağıdaki adımları uygulayın: Bu iletişim kutusunu görmüyorsanız menüde Dosya'ya tıklayın, Yeni 'yi seçin ve sonra da Yeni'yi Project.
Programlama dili olarak C# öğesini seçin.
Uygulamanın türü olarak Konsol'ı seçin.
Sonuç listesinden Konsol Uygulaması'nu seçin.
Ardından, Sonraki'yi seçin.
Proje adı olarak QueueSender, çözüm adı olarak ServiceBusQueueQuickStart girin ve ardından Sonraki'yi seçin.
Ek bilgiler sayfasında, çözümü ve projeyi oluşturmak için Oluştur'a tıklayın.
Service Bus NuGet paketi ekleme
Menüden > Araçlar NuGet Paket Yöneticisi > Paket Yöneticisi Konsolu'nu seçin.
Aşağıdaki komutu çalıştırarak Azure.Messaging.ServiceBus NuGet yükleyin:
Install-Package Azure.Messaging.ServiceBus
Kuyruğa ileti göndermek için kod ekleme
Program.cs içinde, ad alanı tanımının en üstüne, sınıf
usingbildiriminden önce aşağıdaki deyimlerini ekleyin.using System.Threading.Tasks; using Azure.Messaging.ServiceBus;sınıfının
Programiçinde, yönteminin hemen öncesinde aşağıdaki özellikleriMainbildirin.yerine
<NAMESPACE CONNECTION STRING>ad alanınıza birincil bağlantı Service Bus değiştirin. ve yerine<QUEUE NAME>kuyruğun adını yazın.// connection string to your Service Bus namespace static string connectionString = "<NAMESPACE CONNECTION STRING>"; // name of your Service Bus queue static string queueName = "<QUEUE NAME>"; // the client that owns the connection and can be used to create senders and receivers static ServiceBusClient client; // the sender used to publish messages to the queue static ServiceBusSender sender; // number of messages to be sent to the queue private const int numOfMessages = 3;yönteminde yer alan
Mainkodu aşağıdaki kodla değiştirin. Kodla ilgili ayrıntılar için kod açıklamalarını görme. Koddan önemli adımlar aşağıdaki gibidir.Ad alanına birincil bağlantı dizesini kullanarak bir ServiceBusClient nesnesi oluşturur.
Belirli bir kuyruk için servicebusSender nesnesi oluşturmak için ServiceBusClient nesnede CreateSender Service Bus çağırır.
ServiceBusSender.CreateMessageBatchAsync yöntemini kullanarak bir ServiceBusMessageBatch nesnesi oluşturur.
ServiceBusMessageBatch.TryAddMessage kullanarak toplu işleme ileti ekleyin.
ServiceBusSender.SendMessagesAsync yöntemini kullanarak ileti toplu Service Bus toplu iş gönderir.
static async Task Main() { // The Service Bus client types are safe to cache and use as a singleton for the lifetime // of the application, which is best practice when messages are being published or read // regularly. // // Create the clients that we'll use for sending and processing messages. client = new ServiceBusClient(connectionString); sender = client.CreateSender(queueName); // create a batch using ServiceBusMessageBatch messageBatch = await sender.CreateMessageBatchAsync(); for (int i = 1; i <= numOfMessages; i++) { // try adding a message to the batch if (!messageBatch.TryAddMessage(new ServiceBusMessage($"Message {i}"))) { // if it is too large for the batch throw new Exception($"The message {i} is too large to fit in the batch."); } } try { // Use the producer client to send the batch of messages to the Service Bus queue await sender.SendMessagesAsync(messageBatch); Console.WriteLine($"A batch of {numOfMessages} messages has been published to the queue."); } finally { // Calling DisposeAsync on client types is required to ensure that network // resources and other unmanaged objects are properly cleaned up. await sender.DisposeAsync(); await client.DisposeAsync(); } Console.WriteLine("Press any key to end the application"); Console.ReadKey(); }
Program.cs dosyanız şu şekilde olması gerekir:
using System; using System.Threading.Tasks; using Azure.Messaging.ServiceBus; namespace QueueSender { class Program { // connection string to your Service Bus namespace static string connectionString = "<NAMESPACE CONNECTION STRING>"; // name of your Service Bus queue static string queueName = "<QUEUE NAME>"; // the client that owns the connection and can be used to create senders and receivers static ServiceBusClient client; // the sender used to publish messages to the queue static ServiceBusSender sender; // number of messages to be sent to the queue private const int numOfMessages = 3; static async Task Main() { // The Service Bus client types are safe to cache and use as a singleton for the lifetime // of the application, which is best practice when messages are being published or read // regularly. // // Create the clients that we'll use for sending and processing messages. client = new ServiceBusClient(connectionString); sender = client.CreateSender(queueName); // create a batch using ServiceBusMessageBatch messageBatch = await sender.CreateMessageBatchAsync(); for (int i = 1; i <= numOfMessages; i++) { // try adding a message to the batch if (!messageBatch.TryAddMessage(new ServiceBusMessage($"Message {i}"))) { // if it is too large for the batch throw new Exception($"The message {i} is too large to fit in the batch."); } } try { // Use the producer client to send the batch of messages to the Service Bus queue await sender.SendMessagesAsync(messageBatch); Console.WriteLine($"A batch of {numOfMessages} messages has been published to the queue."); } finally { // Calling DisposeAsync on client types is required to ensure that network // resources and other unmanaged objects are properly cleaned up. await sender.DisposeAsync(); await client.DisposeAsync(); } Console.WriteLine("Press any key to end the application"); Console.ReadKey(); } } }yerine
<NAMESPACE CONNECTION STRING>ad alanınıza birincil bağlantı Service Bus değiştirin. ve yerine<QUEUE NAME>kuyruğun adını yazın.Projeyi derleme ve hata yok olduğundan emin olun.
Programı çalıştırın ve onay iletiyi bekleyin.
A batch of 3 messages has been published to the queueAşağıdaki Azure portal adımları izleyin:
Uygulama ad alanınıza Service Bus gidin.
Genel Bakış sayfasında, orta alt bölmede kuyruğu seçin.
Temel Değerler bölümündeki değerlere dikkat edin.
Aşağıdaki değerlere dikkat eder:
- Kuyruğun Etkin ileti sayısı değeri artık 3'tir. İletileri almadan bu gönderen uygulamasını her çalıştırsanız, bu değer 3 artar.
- Uygulama kuyruğa her ileti ekley her sefer kuyruğun geçerli boyutu artıyor.
- En alttaki Ölçümler bölümündeki İletiler grafiğinde kuyruk için üç gelen ileti olduğunu görüyorsunuz.
Kuyruktan ileti alma
Bu bölümde kuyruktan ileti alan bir .NET Core konsol uygulaması oluşturabilirsiniz.
Not
Bu hızlı başlangıç, bir iş kuyruğuna toplu ileti gönderme ve ardından bunları alma ile ilgili basit bir senaryoyu Service Bus adım yönergeler sağlar. Diğer ve gelişmiş senaryolar hakkında daha fazla örnek için bkz. Service Bus .NET örnekleri GitHub.
Alıcı için proje oluşturma
- Yeni Çözüm Gezgini ServiceBusQueueQuickStart çözümüne sağ tıklayın, Ekle'nin üzerine gelin ve Yeni Giriş'i Project.
- Konsol uygulaması'ı ve ardından Sonraki'yi seçin.
- Project için QueueReceiver girin ve Oluştur'a seçin.
- Yeni Çözüm Gezgini QueueReceiver'a sağ tıklayın ve Başlangıç olarak ayarla'yı Project.
Service Bus NuGet paketi ekleme
Menüden > Araçlar NuGet Paket Yöneticisi > Paket Yöneticisi Konsolu'nu seçin.
Yeni Paket Yöneticisi penceresinde Varsayılan proje için QueueReceiver'ın seçili olduğunu onaylayın. Yoksa, QueueReceiver'ı seçmek için açılan listeyi kullanın.
Aşağıdaki komutu çalıştırarak Azure.Messaging.ServiceBus NuGet yükleyin:
Install-Package Azure.Messaging.ServiceBus
Kuyruktan iletileri almak için kodu ekleme
Bu bölümde kuyruktan iletileri almak için kod eksersiniz.
Program.cs içinde, ad alanı tanımının en üstüne, sınıf
usingbildiriminden önce aşağıdaki deyimlerini ekleyin.using System.Threading.Tasks; using Azure.Messaging.ServiceBus;sınıfının
Programiçinde, yönteminin hemen öncesinde aşağıdaki özellikleriMainbildirin.yerine
<NAMESPACE CONNECTION STRING>ad alanınıza birincil bağlantı Service Bus değiştirin. ve yerine<QUEUE NAME>kuyruğun adını yazın.// connection string to your Service Bus namespace static string connectionString = "<NAMESPACE CONNECTION STRING>"; // name of your Service Bus queue static string queueName = "<QUEUE NAME>"; // the client that owns the connection and can be used to create senders and receivers static ServiceBusClient client; // the processor that reads and processes messages from the queue static ServiceBusProcessor processor;Alınan iletileri ve hataları işlemek
Programiçin sınıfına aşağıdaki yöntemleri ekleyin.// handle received messages static async Task MessageHandler(ProcessMessageEventArgs args) { string body = args.Message.Body.ToString(); Console.WriteLine($"Received: {body}"); // complete the message. messages is deleted from the queue. await args.CompleteMessageAsync(args.Message); } // handle any errors when receiving messages static Task ErrorHandler(ProcessErrorEventArgs args) { Console.WriteLine(args.Exception.ToString()); return Task.CompletedTask; }yönteminde yer alan
Mainkodu aşağıdaki kodla değiştirin. Kodla ilgili ayrıntılar için kod açıklamalarını görme. Koddan önemli adımlar aşağıdaki gibidir.Ad alanına birincil bağlantı dizesini kullanarak bir ServiceBusClient nesnesi oluşturur.
ServiceBusClient nesne üzerinde CreateProcessor yöntemini çağırarak belirtilen kuyruk için bir ServiceBusProcessor Service Bus oluşturur.
Servicebusprocessor nesnesinin processmessageasync ve processerrorasync olayları için işleyicileri belirtir.
Servicebusprocessor nesnesinde startprocessingasync öğesini çağırarak iletileri işlemeye başlar.
Kullanıcı işlemeyi bitirmek için bir tuşa bastığında Servicebusprocessor nesnesinde stopprocessingasync öğesini çağırır.
Daha fazla bilgi için bkz. kod açıklamaları.
static async Task Main() { // The Service Bus client types are safe to cache and use as a singleton for the lifetime // of the application, which is best practice when messages are being published or read // regularly. // // Create the client object that will be used to create sender and receiver objects client = new ServiceBusClient(connectionString); // create a processor that we can use to process the messages processor = client.CreateProcessor(queueName, new ServiceBusProcessorOptions()); try { // add handler to process messages processor.ProcessMessageAsync += MessageHandler; // add handler to process any errors processor.ProcessErrorAsync += ErrorHandler; // start processing await processor.StartProcessingAsync(); Console.WriteLine("Wait for a minute and then press any key to end the processing"); Console.ReadKey(); // stop processing Console.WriteLine("\nStopping the receiver..."); await processor.StopProcessingAsync(); Console.WriteLine("Stopped receiving messages"); } finally { // Calling DisposeAsync on client types is required to ensure that network // resources and other unmanaged objects are properly cleaned up. await processor.DisposeAsync(); await client.DisposeAsync(); } }
Şöyle
Program.csgörünmelidir:using System; using System.Threading.Tasks; using Azure.Messaging.ServiceBus; namespace QueueReceiver { class Program { // connection string to your Service Bus namespace static string connectionString = "<NAMESPACE CONNECTION STRING>"; // name of your Service Bus queue static string queueName = "<QUEUE NAME>"; // the client that owns the connection and can be used to create senders and receivers static ServiceBusClient client; // the processor that reads and processes messages from the queue static ServiceBusProcessor processor; // handle received messages static async Task MessageHandler(ProcessMessageEventArgs args) { string body = args.Message.Body.ToString(); Console.WriteLine($"Received: {body}"); // complete the message. messages is deleted from the queue. await args.CompleteMessageAsync(args.Message); } // handle any errors when receiving messages static Task ErrorHandler(ProcessErrorEventArgs args) { Console.WriteLine(args.Exception.ToString()); return Task.CompletedTask; } static async Task Main() { // The Service Bus client types are safe to cache and use as a singleton for the lifetime // of the application, which is best practice when messages are being published or read // regularly. // // Create the client object that will be used to create sender and receiver objects client = new ServiceBusClient(connectionString); // create a processor that we can use to process the messages processor = client.CreateProcessor(queueName, new ServiceBusProcessorOptions()); try { // add handler to process messages processor.ProcessMessageAsync += MessageHandler; // add handler to process any errors processor.ProcessErrorAsync += ErrorHandler; // start processing await processor.StartProcessingAsync(); Console.WriteLine("Wait for a minute and then press any key to end the processing"); Console.ReadKey(); // stop processing Console.WriteLine("\nStopping the receiver..."); await processor.StopProcessingAsync(); Console.WriteLine("Stopped receiving messages"); } finally { // Calling DisposeAsync on client types is required to ensure that network // resources and other unmanaged objects are properly cleaned up. await processor.DisposeAsync(); await client.DisposeAsync(); } } } }<NAMESPACE CONNECTION STRING>Service Bus ad alanınız için birincil bağlantı dizesiyle değiştirin. Ve,<QUEUE NAME>kuyruğunuzun adıyla değiştirin.Projeyi derleyin ve hata olmadığından emin olun.
Alıcı uygulamasını çalıştırın. Alınan iletileri görmeniz gerekir. Alıcıyı ve uygulamayı durdurmak için herhangi bir tuşa basın.
Wait for a minute and then press any key to end the processing Received: Message 1 Received: Message 2 Received: Message 3 Stopping the receiver... Stopped receiving messagesPortalı yeniden kontrol edin. Birkaç dakika bekleyin ve
0etkin iletiler görmüyorsanız sayfayı yenileyin.
Sonraki adımlar
Aşağıdaki belgelere ve örneklere bakın: