Archive for December, 2016

As of v3.7.0 Milestone 8, RabbitMQ ships with a brand new set of CLI tools (rabbitmqctl, 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.