Service Bus işlem işlemeye genel bakış

Bu makalede Microsoft Azure Service Bus'ın işlem özellikleri ele alınmaktadır. Tartışmanın büyük bir kısmı İşlemler örneği tarafından gösterilmiştir. Bu makale, Service Bus'taki işlem işlemeye ve gönderme özelliğine genel bir bakışla sınırlıdır, Atomik İşlemler örneği ise kapsam açısından daha geniş ve daha karmaşıktır.

Dekont

  • Service Bus'ın temel katmanı işlemleri desteklemez. Standart ve premium katmanlar işlemleri destekler. Bu katmanlar arasındaki farklar için bkz . Service Bus fiyatlandırması.
  • Bir işlemde yönetim ve mesajlaşma işlemlerinin karıştırılması desteklenmez.
  • JavaScript SDK'sı işlemleri desteklemez.

Service Bus'taki İşlemler

bir işlem, iki veya daha fazla işlemi bir yürütme kapsamı halinde gruplandırılır. Doğası gereği, böyle bir işlem belirli bir işlem grubuna ait tüm işlemlerin birlikte başarılı veya başarısız olmasını sağlamalıdır. Bu bakımdan işlemler genellikle bölünmezlik olarak adlandırılan tek bir birim görevi görür.

Service Bus bir işlem iletisi aracısıdır ve ileti depolarına karşı tüm iç işlemler için işlem bütünlüğü sağlar. Service Bus'ta iletilerin teslim edilemeyen ileti kuyruğuna taşınması veya iletilerin varlıklar arasında otomatik olarak iletilmesi gibi tüm ileti aktarımları işlemseldir. Bu nedenle, Service Bus bir iletiyi kabul ederse, zaten depolanmış ve bir sıra numarasıyla etiketlenmiştir. Bundan sonra Service Bus içindeki tüm ileti aktarımları varlıklar arasında eşgüdümlü işlemlerdir ve ne kayıplara (kaynak başarılı olur, hedef başarısız olur) ne de iletinin yinelenmesine (kaynak başarısız olur ve hedef başarılı olur) yol açmaz.

Service Bus, bir hareketin kapsamı içindeki işlemlerin (kuyruk, konu başlığı, abonelik gibi) tek bir mesajlaşma varlığına göre gruplanmasını destekler. Örneğin, bir işlem kapsamından bir kuyruğa birkaç ileti gönderebilirsiniz ve iletiler yalnızca işlem başarıyla tamamlandığında kuyruğun günlüğüne işlenir.

İşlem kapsamındaki işlemler

İşlem kapsamında gerçekleştirilebilecek işlemler şunlardır:

  • Gönder
  • Tamamla
  • Bırak
  • Ölü madde
  • Erteleme
  • Kilidi yenile

Alma işlemleri dahil değildir, çünkü uygulamanın bir alma döngüsü içinde veya geri çağırma ile peek-lock modunu kullanarak ileti aldığı varsayılır ve yalnızca bu durumda iletiyi işlemek için bir işlem kapsamı açılır.

İletinin (tamamlanmış, terk edilmiş, teslim edilemeyen, ertelenmiş) konumu, işlemin genel sonucu kapsamında ve buna bağlı olarak gerçekleşir.

Önemli

Azure Service Bus, işlem bir işlem kapsamında olduğunda özel durum olması durumunda işlemi yeniden denemez.

İşlem kapsamlarına kaydetmeyen işlemler

Veritabanlarına ve Cosmos DB gibi diğer hizmetlere çağrı yapan ileti işleme kodunun bu aşağı akış kaynaklarını otomatik olarak aynı işlem kapsamına eklemediğini unutmayın. Bu senaryoları işleme hakkında daha fazla bilgi için, etkili ileti işleme yönergelerine bakın.

Aktarımlar ve "aracılığıyla gönder"

Bir kuyruk veya konu başlığındaki verilerin bir işlemciye ve ardından başka bir kuyruğa veya konuya işlemsel olarak teslimini etkinleştirmek için Service Bus aktarımları destekler. Aktarım işleminde, gönderen önce bir aktarım kuyruğuna veya konuya ileti gönderir ve aktarım kuyruğu veya konu başlığı, otomatik zorlama özelliğinin kullandığı sağlam aktarım uygulamasını kullanarak iletiyi hemen hedef kuyruğa veya konuya taşır. İleti hiçbir zaman aktarım kuyruğuna veya konunun günlüğüne aktarım kuyruğu veya konu tüketicileri için görünür olacak şekilde işlenmez.

Gönderenin giriş iletilerinin kaynağı aktarım kuyruğu veya konu olduğunda bu işlem özelliğinin gücü görünür hale gelir. Başka bir deyişle, Service Bus iletinin hedef kuyruğa veya konu başlığına "aracılığıyla" aktarım kuyruğuna veya konusuna aktarabilir ve giriş iletisinde tek bir atomik işlemle eksiksiz (veya ertelenmiş ya da teslim edilemeyen) bir işlem gerçekleştirebilir.

Bir konu aboneliğinden almanız ve ardından aynı işlemdeki bir kuyruğa veya konuya göndermeniz gerekiyorsa, aktarım varlığı bir konu olmalıdır. Bu senaryoda konu başlığında işlem kapsamını başlatın, işlem kapsamındaki aboneliğinden alın ve aktarım konusu aracılığıyla bir kuyruğa veya konu hedefine gönderin.

Dekont

İleti, işlem kapsamındaki bir aktarım kuyruğu aracılığıyla gönderiliyorsa, TransactionPartitionKey işlevsel olarak ile PartitionKeyeşdeğerdir. İletilerin aktarılırken birlikte ve sırayla tutulmasını sağlar.

Kodda görün

Bu tür aktarımları ayarlamak için, aktarım kuyruğu aracılığıyla hedef kuyruğu hedefleyen bir ileti göndereni oluşturursunuz. Ayrıca, aynı kuyruktan iletileri çeken bir alıcınız da vardır. Örneğin:

Daha sonra basit bir işlem aşağıdaki örnekte olduğu gibi bu öğeleri kullanır. Tam örne başvurmak için GitHub'da kaynak koduna bakın:

var options = new ServiceBusClientOptions { EnableCrossEntityTransactions = true };
await using var client = new ServiceBusClient(connectionString, options);

ServiceBusReceiver receiverA = client.CreateReceiver("queueA");
ServiceBusSender senderB = client.CreateSender("queueB");

ServiceBusReceivedMessage receivedMessage = await receiverA.ReceiveMessageAsync();

using (var ts = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
{
    await receiverA.CompleteMessageAsync(receivedMessage);
    await senderB.SendMessageAsync(new ServiceBusMessage());
    ts.Complete();
}

Özelliği hakkında EnableCrossEntityTransactions daha fazla bilgi edinmek için aşağıdaki ServiceBusClientBuilder.enableCrossEntityTransactions Yöntemi başvurusuna bakın.

Timeout

İşlem 2 dakika sonra zaman aşımına uğradı. İşlem zamanlayıcısı, işlemdeki ilk işlem başladığında başlar.

Sonraki adımlar

Service Bus kuyrukları hakkında daha fazla bilgi için aşağıdaki makalelere bakın: