Skip to content

Commit 2e8168c

Browse files
authored
Merge pull request #2519 from Particular/john/del
Add internal property to disable delayed delivery
2 parents dab74cb + f550a01 commit 2e8168c

File tree

4 files changed

+33
-10
lines changed

4 files changed

+33
-10
lines changed

src/NServiceBus.Transport.SQS.Tests/SdkClientsDisposeTests.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,8 @@ public async Task ShouldDisposeSqsAndSnsClients(bool disposeSqs, bool disposeSns
6060
"",
6161
false,
6262
disposeSqs,
63-
disposeSns);
63+
disposeSns,
64+
false);
6465

6566
await sut.Shutdown(CancellationToken.None);
6667

src/NServiceBus.Transport.SQS/Configure/SqsTransport.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,11 @@ internal set
5757
/// </summary>
5858
public string QueueNamePrefix { get; set; }
5959

60+
/// <summary>
61+
/// Disable native delayed delivery infrastructure
62+
/// </summary>
63+
internal bool DisableDelayedDelivery { get; set; } = false;
64+
6065
/// <summary>
6166
/// Specifies a lambda function that allows to take control of the queue name generation logic.
6267
/// This is useful to overcome any limitations imposed by SQS.
@@ -248,14 +253,14 @@ public override async Task<TransportInfrastructure> Initialize(HostSettings host
248253
AssertQueueNameGeneratorIdempotent(queueNameGenerator);
249254

250255
var topicCache = new TopicCache(SnsClient, hostSettings.CoreSettings, eventToTopicsMappings, eventToEventsMappings, topicNameGenerator, topicNamePrefix);
251-
var infra = new SqsTransportInfrastructure(hostSettings, receivers, SqsClient, SnsClient, QueueCache, topicCache, S3, Policies, QueueDelayTime, topicNamePrefix, DoNotWrapOutgoingMessages, !externallyManagedSqsClient, !externallyManagedSnsClient);
256+
var infra = new SqsTransportInfrastructure(hostSettings, receivers, SqsClient, SnsClient, QueueCache, topicCache, S3, Policies, QueueDelayTime, topicNamePrefix, DoNotWrapOutgoingMessages, !externallyManagedSqsClient, !externallyManagedSnsClient, DisableDelayedDelivery);
252257

253258
if (hostSettings.SetupInfrastructure)
254259
{
255260
var queueCreator = new QueueCreator(SqsClient, QueueCache, S3, maxTimeToLive, QueueDelayTime);
256261

257262
var createQueueTasks = sendingAddresses.Select(x => queueCreator.CreateQueueIfNecessary(x, false, cancellationToken))
258-
.Concat(infra.Receivers.Values.Select(x => queueCreator.CreateQueueIfNecessary(x.ReceiveAddress, true, cancellationToken))).ToArray();
263+
.Concat(infra.Receivers.Values.Select(x => queueCreator.CreateQueueIfNecessary(x.ReceiveAddress, !DisableDelayedDelivery, cancellationToken))).ToArray();
259264

260265
await Task.WhenAll(createQueueTasks).ConfigureAwait(false);
261266
}

src/NServiceBus.Transport.SQS/Configure/SqsTransportInfrastructure.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,14 @@ class SqsTransportInfrastructure : TransportInfrastructure
1515
{
1616
public SqsTransportInfrastructure(HostSettings hostSettings, ReceiveSettings[] receiverSettings, IAmazonSQS sqsClient,
1717
IAmazonSimpleNotificationService snsClient, QueueCache queueCache, TopicCache topicCache, S3Settings s3Settings, PolicySettings policySettings, int queueDelayTimeSeconds, string topicNamePrefix, bool doNotWrapOutgoingMessages,
18-
bool shouldDisposeSqsClient, bool shouldDisposeSnsClient)
18+
bool shouldDisposeSqsClient, bool shouldDisposeSnsClient, bool disableDelayedDelivery)
1919
{
2020
this.sqsClient = sqsClient;
2121
this.snsClient = snsClient;
2222
this.queueCache = queueCache;
2323
this.shouldDisposeSqsClient = shouldDisposeSqsClient;
2424
this.shouldDisposeSnsClient = shouldDisposeSnsClient;
25+
this.disableDelayedDelivery = disableDelayedDelivery;
2526
coreSettings = hostSettings.CoreSettings;
2627
s3Client = s3Settings?.S3Client;
2728
setupInfrastructure = hostSettings.SetupInfrastructure;
@@ -42,7 +43,7 @@ IMessageReceiver CreateMessagePump(ReceiveSettings receiveSettings, IAmazonSQS s
4243
var receiveAddress = ToTransportAddress(receiveSettings.ReceiveAddress);
4344
var subManager = new SubscriptionManager(sqsClient, snsClient, receiveAddress, queueCache, topicCache, policySettings, topicNamePrefix, setupInfrastructure);
4445

45-
return new MessagePump(receiveSettings.Id, receiveAddress, receiveSettings.ErrorQueue, receiveSettings.PurgeOnStartup, sqsClient, queueCache, s3Settings, subManager, queueDelayTimeSeconds, criticalErrorAction, coreSettings, setupInfrastructure);
46+
return new MessagePump(receiveSettings.Id, receiveAddress, receiveSettings.ErrorQueue, receiveSettings.PurgeOnStartup, sqsClient, queueCache, s3Settings, subManager, queueDelayTimeSeconds, criticalErrorAction, coreSettings, setupInfrastructure, disableDelayedDelivery);
4647
}
4748

4849
public override Task Shutdown(CancellationToken cancellationToken = default)
@@ -90,6 +91,7 @@ public override string ToTransportAddress(QueueAddress address)
9091
readonly bool setupInfrastructure;
9192
readonly bool shouldDisposeSqsClient;
9293
readonly bool shouldDisposeSnsClient;
94+
readonly bool disableDelayedDelivery;
9395
readonly bool shouldDisposeS3Client;
9496
}
9597
}

src/NServiceBus.Transport.SQS/MessagePump.cs

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ namespace NServiceBus.Transport.SQS
88

99
class MessagePump : IMessageReceiver
1010
{
11+
readonly bool disableDelayedDelivery;
1112
readonly InputQueuePump inputQueuePump;
1213
readonly DelayedMessagesPump delayedMessagesPump;
1314

@@ -23,27 +24,41 @@ public MessagePump(
2324
int queueDelayTimeSeconds,
2425
Action<string, Exception, CancellationToken> criticalErrorAction,
2526
IReadOnlySettings coreSettings,
26-
bool setupInfrastructure)
27+
bool setupInfrastructure,
28+
bool disableDelayedDelivery)
2729
{
30+
this.disableDelayedDelivery = disableDelayedDelivery;
2831
inputQueuePump = new InputQueuePump(receiverId, receiveAddress, errorQueueAddress, purgeOnStartup, sqsClient, queueCache, s3Settings, subscriptionManager, criticalErrorAction, coreSettings, setupInfrastructure);
29-
delayedMessagesPump = new DelayedMessagesPump(receiveAddress, sqsClient, queueCache, queueDelayTimeSeconds);
32+
if (!disableDelayedDelivery)
33+
{
34+
delayedMessagesPump =
35+
new DelayedMessagesPump(receiveAddress, sqsClient, queueCache, queueDelayTimeSeconds);
36+
}
3037
}
3138

3239
public async Task Initialize(PushRuntimeSettings limitations, OnMessage onMessage, OnError onError, CancellationToken cancellationToken = default)
3340
{
3441
await inputQueuePump.Initialize(limitations, onMessage, onError, cancellationToken).ConfigureAwait(false);
35-
await delayedMessagesPump.Initialize(cancellationToken).ConfigureAwait(false);
42+
if (!disableDelayedDelivery)
43+
{
44+
await delayedMessagesPump.Initialize(cancellationToken).ConfigureAwait(false);
45+
}
3646
}
3747

3848
public async Task StartReceive(CancellationToken cancellationToken = default)
3949
{
4050
await inputQueuePump.StartReceive(cancellationToken).ConfigureAwait(false);
41-
delayedMessagesPump.Start(cancellationToken);
51+
if (!disableDelayedDelivery)
52+
{
53+
delayedMessagesPump.Start(cancellationToken);
54+
}
4255
}
4356

4457
public Task StopReceive(CancellationToken cancellationToken = default)
4558
{
46-
var stopDelayed = delayedMessagesPump.Stop(cancellationToken);
59+
var stopDelayed = !disableDelayedDelivery
60+
? delayedMessagesPump.Stop(cancellationToken)
61+
: Task.CompletedTask;
4762
var stopPump = inputQueuePump.StopReceive(cancellationToken);
4863

4964
return Task.WhenAll(stopDelayed, stopPump);

0 commit comments

Comments
 (0)