Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@ namespace DurableTask.ServiceBus.Common.Abstraction
{
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using DurableTask.Core.Tracing;

/// <inheritdoc />
public class IMessageSession
Expand Down Expand Up @@ -330,15 +332,35 @@ public async Task SendAsync(Message message)
await sender.SendMessageAsync(message);
}

/// <summary>
/// Sends the messages in a single batch. Messages that do not fit in the batch are not sent and are traced as errors.
/// </summary>
public async Task SendAsync(IEnumerable<Message> messageList)
{
var batch = await sender.CreateMessageBatchAsync();
foreach (var message in messageList)
using (Azure.Messaging.ServiceBus.ServiceBusMessageBatch batch = await sender.CreateMessageBatchAsync())
{
batch.TryAddMessage(message);
int droppedCount = 0;
long droppedBodyBytes = 0;
foreach (Azure.Messaging.ServiceBus.ServiceBusMessage sbMessage in messageList)
{
if (!batch.TryAddMessage(sbMessage))
{
droppedCount++;
droppedBodyBytes += sbMessage.Body.ToMemory().Length;
}
}

if (droppedCount > 0)
{
TraceHelper.Trace(
TraceEventType.Error,
"MessageSender-SendAsync-MessagesDropped",
() => $"{droppedCount} message(s) ({droppedBodyBytes} body bytes) did not fit in the batch for '{sender.EntityPath}' " +
$"and were not sent; {batch.Count} message(s) were added to the batch (maximum batch size: {batch.MaxSizeInBytes} bytes).");
}

await sender.SendMessagesAsync(batch);
}

await sender.SendMessagesAsync(batch);
}

public async Task CloseAsync()
Expand Down
Loading