使用Azure.Messaging.ServiceBus.
我想在一個事務中向 Azure 服務總線發送多條訊息。我可以接受每筆交易 100 條訊息的限制。
這兩種方法的優缺點是什么?
TransactionScope TransactionScope
中的多個單訊息發送操作。
public async Task SendMessages(IEnumerable<ServiceBusMessage> messages, CancellationToken cancellationToken)
{
using var transaction = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled);
var tasks = messages.Select(m => _serviceBusSender.SendMessageAsync(m, cancellationToken));
await Task.WhenAll(tasks);
transaction.Complete();
}
ServiceBusMessageBatch
單次發送操作,發送一個ServiceBusMessageBatch。
public async Task SendMessages(IEnumerable<ServiceBusMessage> messages, CancellationToken cancellationToken)
{
var batch = await _serviceBusSender.CreateMessageBatchAsync(cancellationToken);
foreach (var message in messages)
{
if (!batch.TryAddMessage(message))
throw new Exception("...");
}
await _serviceBusSender.SendMessagesAsync(batch, cancellationToken);
}
uj5u.com熱心網友回復:
批處理是一種在不超過總大小約束的情況下向代理發送多條訊息的方法,因為在批處理構建期間,API 不會添加會導致批處理大小超過允許的最大值的訊息。這就是批處理的用途,為了安全,確保您在調度時不會收到訊息大小例外。
TransactionScope確保在同一事務中發送的訊息在成功時全部發送,或者在其中一條訊息失敗時恢復。
對于一個批次,它是對經紀人的一次呼叫。具有事務范圍的代理有多個并發呼叫,例如發送操作的數量。
批處理的好處:對代理的一次呼叫不會因為太多訊息組合在一起并且超過最大大小而失敗。當您準備好發送多條訊息時,這很方便。
事務作用域的好處是當您需要發送訊息但沒有在同一個實體中全部可用或需要在即發即棄模式下發送但仍希望確保以原子方式發送這些訊息時。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/438402.html
