Skip to content

Commit e55dd06

Browse files
authored
Allow infinite timeout with publish confirms (#1049)
1 parent 79bd020 commit e55dd06

File tree

3 files changed

+29
-7
lines changed

3 files changed

+29
-7
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using System;
2+
using System.Threading;
3+
4+
namespace EasyNetQ
5+
{
6+
// TODO Should migrate Timeout from ushort to TimeSpan
7+
internal static class ConnectionConfigurationExtensions
8+
{
9+
public static TimeSpan GetTimeout(this ConnectionConfiguration configuration)
10+
{
11+
return configuration.Timeout == 0 ? Timeout.InfiniteTimeSpan : TimeSpan.FromSeconds(configuration.Timeout);
12+
}
13+
}
14+
}

Source/EasyNetQ/Producer/PersistentChannel.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,7 @@ public void InvokeChannelAction(Action<IModel> channelAction)
4242
{
4343
Preconditions.CheckNotNull(channelAction, "channelAction");
4444

45-
var timeout = configuration.Timeout.Equals(0)
46-
? TimeBudget.Infinite()
47-
: TimeBudget.Start(TimeSpan.FromSeconds(configuration.Timeout));
45+
var timeout = TimeBudget.Start(configuration.GetTimeout());
4846

4947
var retryTimeoutMs = MinRetryTimeoutMs;
5048
while (!timeout.IsExpired())

Source/EasyNetQ/RabbitAdvancedBus.cs

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -228,9 +228,14 @@ public void Publish(
228228
var rawMessage = produceConsumeInterceptor.OnProduce(new RawMessage(messageProperties, body));
229229
if (connectionConfiguration.PublisherConfirms)
230230
{
231-
var timeout = TimeBudget.Start(TimeSpan.FromSeconds(connectionConfiguration.Timeout));
232-
while (!timeout.IsExpired())
231+
var timeout = TimeBudget.Start(connectionConfiguration.GetTimeout());
232+
while (true)
233233
{
234+
if (timeout.IsExpired())
235+
{
236+
throw new TimeoutException($"Publish timed out after {connectionConfiguration.Timeout} seconds");
237+
}
238+
234239
var confirmsWaiter = clientCommandDispatcher.Invoke(model =>
235240
{
236241
var properties = model.CreateBasicProperties();
@@ -338,9 +343,14 @@ public virtual async Task PublishAsync(
338343
var rawMessage = produceConsumeInterceptor.OnProduce(new RawMessage(messageProperties, body));
339344
if (connectionConfiguration.PublisherConfirms)
340345
{
341-
var timeout = TimeBudget.Start(TimeSpan.FromSeconds(connectionConfiguration.Timeout));
342-
while (!timeout.IsExpired())
346+
var timeout = TimeBudget.Start(connectionConfiguration.GetTimeout());
347+
while (true)
343348
{
349+
if (timeout.IsExpired())
350+
{
351+
throw new TimeoutException($"Publish timed out after {connectionConfiguration.Timeout} seconds");
352+
}
353+
344354
var confirmsWaiter = await clientCommandDispatcher.InvokeAsync(model =>
345355
{
346356
var properties = model.CreateBasicProperties();

0 commit comments

Comments
 (0)