As of v3.7.0 Milestone 8, RabbitMQ ships with a brand new set of CLI tools (
rabbitmq-plugins, and more), reworked from the ground up. We had a few goals with this project:
- We wanted to use a more user-friendly command line parser and produce more useful help and error messages.
- CLI tools should be extensible from plugins: plugins such as management, federation, shovel, trust store all have functions that are meant to be invoked by CLI tools but the only way of doing it was `rabbitmqctl eval`, which is error prone and can be dangerous.
- We wanted to give Elixir a try on a real project and make it easier for developers new to Erlang to extend the CLI functionality.
- Our CLI tools historically didn't have good test coverage; the new ones should (and do).
- CLI tools should be able to produce machine-friendly formats, be it JSON, CSV or something else; there was no internal infrastructure for doing that in the original implementation.
- CLI tools should be a separate repository just like all plugins, client libraries, and so on.
Nine months later the experiment was declared a success and integrated into RabbitMQ distribution.
There's also a longer document that covers new features and implementation decisions.