Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RabbitMQ Transport Classic to Quorum queue migration blocked by ServiceControl.ThroughputData queue #4577

Open
Jamie-Clayton opened this issue Oct 30, 2024 · 1 comment

Comments

@Jamie-Clayton
Copy link

Jamie-Clayton commented Oct 30, 2024

Describe the suggested improvement

Is your improvement related to a problem? Please describe.

I've currently got a lot of NServiceBus v7 endpoints (30ish) that I want to migrate to v9 and change from RabbitMQ classic to quorum transport topology. I'm assuming this is the desirable step forward when using RabbitMQ.

The error output from ServiceControl.exe was:
Unhandled exception. RabbitMQ.Client.Exceptions.OperationInterruptedException: 
The AMQP operation was interrupted: 
AMQP close-reason, initiated by Peer, code=406, text='PRECONDITION_FAILED - 
inequivalent arg 'x-queue-type' for queue 'ServiceControl.ThroughputData' 
in vhost 'development': 
received the value 'quorum' of type 'longstr' but current is none', classId=50, methodId=10

Describe the suggested solution

  1. When installing a new side by side instance of service control pointing at the same RabbitMQ server, replace the previous one with the transport type define last.
  2. Enable multiple ServiceControl.ThroughputData queues to exist by randomising a suffix or incrementing them . E.g. ServiceControl.ThroughputData-1, ServiceControl.ThroughputData-2
  3. Refactor the name of the ThroughputData queue to use the prefix of the Service Control instance name you have defined.

Describe alternatives you've considered

  1. Manualy deleting the existing ServiceControl.ThroughputData Classic queue to enable the new quorum one to be created.
  2. Standing up a new RabbitMQ cluster/server with only quorum queues (I've got a Docker-Compose solution running locally with full quorum support). Got some process continuity issues with this approach.
  3. Upgrade all the NServiceBus endpoints at the same time. This not practical even with CICD automation for all these services.

Rabbit Queue Example with older Service Control queues
ThroughputData-RabbitMQ

Docker-Compose Local container environment is ready for v9 + quorum queue isolated testing.
ThroughputData-DockerCompose-LocalEnv

Additional Context

No response

@Jamie-Clayton
Copy link
Author

By the way, a simple manual delete of the queue and exchange unblocks me for the timebeing in my lower environment.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant