Kuyruk kullanarak ileti göndermek ve almak için kod yazma

Tamamlandı

Dağıtılmış uygulamalar, bir hedef bileşene teslim edilmeyi bekleyen iletiler için geçici depolama konumları olarak Service Bus kuyruklarını kullanır. Kuyruk üzerinden ileti göndermek ve almak için hem kaynak hem de hedef bileşenlere kod yazmanız gerekir.

Contoso Bisikletleri uygulamasını göz önünde bulundurun. Müşteri bir web sitesi veya mobil uygulama aracılığıyla sipariş verebilir. Web siteleri ve mobil uygulamalar müşteri cihazlarında çalıştırıldığından, aynı anda kaç sipariş verileceğiyle ilgili bir sınır yoktur. Mobil uygulamanın ve web sitesinin siparişleri bir Service Bus kuyruğuna yatırmasını sağlayarak, arka uç bileşeni (bir web uygulaması) bu kuyruktaki siparişleri kendi hızıyla işleyebilecektir.

Contoso Bisikletleri uygulamasının aslında yeni bir siparişi işlemek için birkaç adımı vardır. Tüm adımlar ilk yetkilendirme ödemesine bağlıdır, bu nedenle bir kuyruk kullanmaya karar verirsiniz. Alıcı bileşenin ilk işi ödemeyi işlemektir.

Mobil uygulamada ve web sitesinde Contoso’nun kuyruğa bir ileti ekleyen kodu yazması gerekmektedir. Contoso, arka uç web uygulamasında kuyruktan iletileri alan kod yazar.

Burada, Service Bus kuyruğu kullanarak ileti göndermek ve almak için kod yazma işlemine ve dikkat edilmesi gerekenlere göz atacaksınız.

Azure.Messaging.ServiceBus NuGet paketi

Microsoft, Service Bus aracılığıyla ileti gönderen ve alan kod yazmayı kolaylaştırmak için bir .NET sınıfları kitaplığı sağlar. Service Bus kuyruğu veya konu başlığıyla etkileşime geçmek için herhangi bir .NET dilinde kullanabilirsiniz. Azure.Messaging.ServiceBus NuGet paketini ekleyerek bu kitaplığı uygulamanıza ekleyebilirsiniz.

Bağlantı dizeleri ve anahtarlar

Hem kaynak bileşenlerinin hem de hedef bileşenlerinin bir Service Bus ad alanındaki kuyruğa bağlanmak için iki bilgiye ihtiyacı vardır:

  • Uç nokta olarak da bilinen Service Bus ad alanı konumu: Konum, servicebus.windows.net etki alanı içinde tam etki alanı adı olarak belirtilir. Örneğin: bicycleService.servicebus.windows.net.
  • Erişim anahtarı: Service Bus, geçerli bir erişim anahtarı gerektirerek kuyruklara veya konulara erişimi kısıtlar.

Bu bilgilerin her ikisi de ServiceBusClient nesnesine bağlantı dizesi biçiminde sağlanır. Azure portalından ad alanınız için doğru bağlantı dizesi alabilirsiniz.

Yöntemleri zaman uyumsuz olarak çağırma

Azure'daki kuyruk, bileşenlerin gönderilmesinden ve alınmasından binlerce mil uzakta olabilir. Fiziksel olarak yakın olsa bile, yavaş bağlantılar ve bant genişliği çekişmesi, bileşen kuyrukta bir yöntemi çağırdığında gecikmelere neden olabilir. Bu nedenle, Service Bus istemci kitaplığı kuyruklarla etkileşime yönelik yöntemleri kullanılabilir hale getirir async . Çağrıların tamamlanmasını beklerken bir iş parçacığının engellenmesini önlemek için bu yöntemleri kullanacağız.

Örneğin kuyruğa ileti gönderdiğinizde SendMessageAsync yöntemini anahtar sözcüğüyle await kullanın.

Kuyruğa ileti göndermek için

Kuyruğa ileti göndermek için aşağıdaki adımları tamamlayacaksınız.

Herhangi bir gönderen veya alan bileşende, Service Bus kuyruğu çağıran herhangi bir kod dosyasına aşağıdaki using deyimleri ekleyin.

using System.Threading;
using System.Threading.Tasks;
using Azure.Messaging.ServiceBus;

Ardından yeni ServiceBusClient bir nesne oluşturun ve bağlantı dizesi ve kuyruğun adını geçirin.

// Create a ServiceBusClient object using the connection string to the namespace.
await using var client = new ServiceBusClient(connectionString);
    
// Create a ServiceBusSender object by invoking the CreateSender method on the ServiceBusClient object, and specifying the queue name. 
ServiceBusSender sender = client.CreateSender(queueName);

yöntemini çağırıp ServiceBusSender.SendMessageAsync() geçirerek ServiceBusMessagekuyruğa ileti gönderebilirsiniz.

// Create a new message to send to the queue.
string messageContent = "Order new crankshaft for eBike.";
var message = new ServiceBusMessage(messageContent);

// Send the message to the queue.
await sender.SendMessageAsync(message);

Kuyruktan ileti almak için

İletileri almak için önce bir ileti işleyicisi kaydetmeniz gerekir. İleti işleyicisi, kuyrukta bir ileti kullanılabilir olduğunda çağrılan kodunuzdaki yöntemdir.

// Create a ServiceBusProcessor for the queue.
await using ServiceBusProcessor processor = client.CreateProcessor(queueName, options);
    
// Specify handler methods for messages and errors.
processor.ProcessMessageAsync += MessageHandler;
processor.ProcessErrorAsync += ErrorHandler;

İşleme işinizi gerçekleştirin. Ardından, ileti işleyicisinin içinde, iletiyi kuyruktan kaldırmak için yöntemini çağırın ProcessMessageEventArgs.CompleteMessageAsync() .

await args.CompleteMessageAsync(args.Message);