Skip to content

Commit f60fa9f

Browse files
Refactored PublisherConfirms.cs
* Deduped PublishMessagesInBatchAsync() method's batch publishing code * Deleted outstandingMessageCount variable; use publishTasks.Count instead * Fixed potential bug by setting minimum batch size to 1
1 parent dc2fe75 commit f60fa9f

File tree

1 file changed

+7
-25
lines changed

1 file changed

+7
-25
lines changed

dotnet/PublisherConfirms/PublisherConfirms.cs

+7-25
Original file line numberDiff line numberDiff line change
@@ -83,20 +83,20 @@ async Task PublishMessagesInBatchAsync()
8383
QueueDeclareOk queueDeclareResult = await channel.QueueDeclareAsync();
8484
string queueName = queueDeclareResult.QueueName;
8585

86-
int batchSize = MAX_OUTSTANDING_CONFIRMS / 2;
87-
int outstandingMessageCount = 0;
86+
int batchSize = Math.Max(1, MAX_OUTSTANDING_CONFIRMS / 2);
8887

89-
var sw = new Stopwatch();
90-
sw.Start();
88+
var sw = Stopwatch.StartNew();
9189

9290
var publishTasks = new List<ValueTask>();
9391
for (int i = 0; i < MESSAGE_COUNT; i++)
9492
{
9593
byte[] body = Encoding.UTF8.GetBytes(i.ToString());
96-
publishTasks.Add(channel.BasicPublishAsync(exchange: string.Empty, routingKey: queueName, body: body, mandatory: true, basicProperties: props));
97-
outstandingMessageCount++;
94+
ValueTask publishTask = channel.BasicPublishAsync(exchange: string.Empty, routingKey: queueName, body: body, mandatory: true, basicProperties: props);
95+
publishTasks.Add(publishTask);
9896

99-
if (outstandingMessageCount == batchSize)
97+
// NOTE: [publishTasks] should be published after the final message has been added,
98+
// even if the # of tasks it contains isn't equal to [batchSize].
99+
if (publishTasks.Count == batchSize || i+1 == MESSAGE_COUNT)
100100
{
101101
foreach (ValueTask pt in publishTasks)
102102
{
@@ -110,25 +110,7 @@ async Task PublishMessagesInBatchAsync()
110110
}
111111
}
112112
publishTasks.Clear();
113-
outstandingMessageCount = 0;
114-
}
115-
}
116-
117-
if (publishTasks.Count > 0)
118-
{
119-
foreach (ValueTask pt in publishTasks)
120-
{
121-
try
122-
{
123-
await pt;
124-
}
125-
catch (Exception ex)
126-
{
127-
Console.Error.WriteLine($"{DateTime.Now} [ERROR] saw nack or return, ex: '{ex}'");
128-
}
129113
}
130-
publishTasks.Clear();
131-
outstandingMessageCount = 0;
132114
}
133115

134116
sw.Stop();

0 commit comments

Comments
 (0)