justeattakeaway / JustSaying

A light-weight message bus on top of AWS services (SNS and SQS).
Apache License 2.0
48 stars 18 forks source link

IaC Error Queue not respected with Topic #1484

Open jjnrmason opened 2 months ago

jjnrmason commented 2 months ago

Describe the bug Error Queue is created when DLQ is already configured on the queue.

Steps To reproduce Create my infrastructure using CDK before I run my apps. I create

Via JustSayings configuration I do the following:

busBuilder.Subscriptions(subscriptionsBuilder => {
    subscriptionsBuilder.ForQueueUri<OrderCreatedEvent>(new Uri(builder.Configuration.GetSection("QueueConfig:OrderQueueUrl").Get<string>()!));
    subscriptionsBuilder.ForTopic<OrderCreatedEvent>(cfg => cfg
        .WithTopicName(builder.Configuration.GetSection("QueueConfig:OrderTopicName").Get<string>()!)
        .WithQueueName(builder.Configuration.GetSection("QueueConfig:OrderQueueName").Get<string>()!)); // Doesn't respect error queue
});

Setup the subscription to the topic for the message OrderCreatedEvent and add the topic name and queue name. Additionally configure the queue URI.

Expected behaviour I would expect the library to know when providing the QueueName and topic name to load the existing queue and know it has a DLQ already.

Actual behaviour Instead the library cretes a new DLQ and updated the queues DLQ. Error queues

System information:

Additional context N/A

jjnrmason commented 2 months ago

I can see that there is 2 different paths. WithQueueUri uses the QueueAddressSubscriptionBuilder and won't check for anything existing and ForTopic uses the TopicSubscriptionBuilder which does check.

TopicSubscriptionBuilder will always try to create the error queue because it'll check for sourceQueueName + "_error" (ErrorQueue).

I wonder if it'd be sensible to add WithQueueUri to the TopicSubscriptionBuilder