Federation Requires local AND upstream Rabbit to have Federation Plugin enabled -> Breaking Change since 3.x #12893
-
Describe the bugSince we upgraded our cental RabbitMQ from Version 3.x to Version 4.0.4 we are no longer able to setup a federation from our developer RabbitMQ-Instances to the central (upstream) RabbitMQ. All developer RabbitMQ-Instances are running with Federation Plugin enabled. With RabbitMQ 3.x as central RabbitMQ everything worked even with no Federation Plugin installed. With RabbitMQ 4.0.4 we get the following error on the satellites in Federation Status:
As you can see in the screenshot:
Reproduction stepsUse the following Docker-Compose file to setup:
docker-compose.yaml
File: rabbitmq/enabled_plugins
Execute the following commands for a demo setupCreate Exchange exchange.demo in all RabbitMQ instances
Create Federation from rabbit (satellite) to conn4-wo-plugins (upstream 4.x with no plugins enabled)
=> This federation does not work Create Federation from rabbit (satellite) to conn4-with-plugins (upstream 4.x with Fed. Plugin)
=> This federation works Create Federation from rabbit (satellite) to conn3-wo-plugins (upstream 3.x with no plugins enabled)
=> This federation works Expected behaviorI expect Federation to work without additional plugins on the upsteam server. Additional contextNo response |
Beta Was this translation helpful? Give feedback.
Replies: 4 comments 3 replies
-
@BenniG82 I'm afraid in order to use a feature provided by a plugin you must have it enabled. The very first step in the docs explains how to enable the plugin. Queue federation could work (one way) without queue federation on the upstream side. This was by accident. By your logic, management UI should be available without the management plugin. Same for the MQTT implementation? That's not how plugins are supposed to work. |
Beta Was this translation helpful? Give feedback.
-
We can mention this in 4.0.1 release notes but the 3.x behavior you claim is just an accident. Federation may look like a "regular consumer" to upstream clusters in some cases, but that was never a design goal with either exchange or queue federation. As RabbitMQ core engineering team we cannot develop inter-cluster features as plugins with the assumption that "the plugin might not be available on the other side". If it's not, then it should be enabled or you cannot use this feature. This is not just the realities of distributed system development, this is common sense. If it did work by accident before, that was just that, an accident. And this is not a breaking change, this is an incorrect use of plugins that goes against the very first recommendation in the docs. I will verify if the docs might imply that enabling the plugin is optional because that was never a design goal. |
Beta Was this translation helpful? Give feedback.
-
@BenniG82 it turns out you found a bug in how RabbitMQ 3.x operates. When you enable the But, why are you seeing this? The Docker image ships with an Like @michaelklishin said, there's really nothing here to fix, because the documentation is clear - both sides of a Federation link need to have the plugin enabled. It's just that, in the case you found, the |
Beta Was this translation helpful? Give feedback.
-
@lukebakken @michaelklishin Just one thing to add:
To me this precondition was not clear. I implicitly assumed, that the Federation Plugin is just a special kind of consumer. Maybe you could add a note in the Getting-Started Section at https://www.rabbitmq.com/docs/federation#getting-started?
Thanks for your lightning fast responses 🥇 |
Beta Was this translation helpful? Give feedback.
@BenniG82 I'm afraid in order to use a feature provided by a plugin you must have it enabled. The very first step in the docs explains how to enable the plugin.
Queue federation could work (one way) without queue federation on the upstream side. This was by accident.
By your logic, management UI should be available without the management plugin. Same for the MQTT implementation? That's not how plugins are supposed to work.