Skip to content
rmqctl, the swiss-army knife tooling for rabbitmq
Branch: v1
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
cmd
example
pkg
.bazelrc
.gitignore
.golangci.yml
.travis.yml
BUILD.bazel
LICENSE
README.rst
WORKSPACE
go.mod
go.sum
main.go
rabbitmq.config
rmqctl.conf

README.rst

rmqctl

travis go report go doc license release


rmqctl is the swiss-army knife tool for rabbitmq with kubectl like commands.


Binary Release:

binary release v1.0.15
  • 'rmqctl publish' now publishes input from STDIN.
  • 'rmqctl publish' -e flag now takes executable with arguments.

e.g -e "/usr/bin/ls -al"

binary release v1.0.14
  • 'rmqctl publish' adds new flag '-e' for user provided executable,

    which generates messages to 'stdout' where rmqctl consumes and publishes to the queue.

binary release v1.0.12
  • fix issues for rabbit-hole.DeleteBinding uses BindingInfo.PropertiesKey as routing key

instead of BindingInfo.RoutingKey

binary release v1.0.11
  • Logging bug fix
binary release v1.0.10
  • Purge queue / purge queue with prompt [y/n]
  • Consume queue with numbers, e.g only consumes 10 messages
binary release v1.0.9
  • honors -a, -d in create queue/exchange
binary release v1.0.8
  • Now supports TLS connection for AMQP and HTTPS
  • New 'tls' entry in rmqctl.conf
  • New flag '-T' indicates using TLS connection.
  • Bug fix.
binary release v1.0.7
  • Now supports burst message publish mode.

    Alone with daemon mode, rmqctl is used as a stress test tool for rabbitmq.

    e.g.

    $ rmqctl publish exchange_name routing_key "MESSAGE" -b 1000000

    Publish with other payload

    $ rmqctl publish exchange_name routing_key "$(cat payload.json)" -b 1000000

  • Now supports publish mode: Transient, Persistent

  • Change default config file name to rmqctl.conf

  • Change load config file name flag to '-c'

  • Formalize debug log message.

binary release v1.0.3
  • Publish/Consume use amqp protocol for performance. Other actions using rabbitmq REST API calls.
  • Now supports bash/rawjson output format.
binary release v1.0.0
  • init. release

rmqctl.conf

rmqctl loads rmqctl.conf (yaml) under working directory if there is one. Command arguments have higher precedence if provided.

username: guest
password: guest
port: 5672
apiport: 15672
host: localhost
tls: true
vhost: "/"
Loads rmqctl.conf from other location
$ rmqctl -c path/to/rmqctl.conf COMMANDS

Supports

AMQP Protocol

rmqctl uses amqp protocol library for publish/consume message for speed.

rmqctl supports burst publish/daemon consume, act as a perfect tool for stress test

and debugging the application.

TLS support

Place client certificate and private key pair with read only permission (0400)

under $HOME/.ssh/ name as follows:

~/.ssh/rmq_cert.pem
~/.ssh/rmq_key.pem

If rabbitmq server using self-signed certificate,

remember to register self-signed CA into client's host system.

Setting up rabbitmq server TLS support for both

AMQP and API Service config file can refere to example:

rabbitmq_tls.config

Create

  • queue, queue in HA mode(with single command)
  • exchange
  • queue/exchange binding
  • user
  • vhost
  • --help for more features

List

  • queue
  • exchange
  • queue/exchange binding
  • user
  • vhost
  • node
  • policy
  • --help for more features

Delete

  • queue
  • exchange
  • queue/exchange binding
  • user
  • vhost
  • policy
  • --help for more features

Update

  • vhost
  • user
  • --help for more features

Publish

  • Publish with routing key
  • Publish messages generated from user provided executable
  • Burst publishing (testing throughput)
  • Supports transient|persistent modes
  • --help for more features

Consume

  • Consume supports ack|nack|reject|auto-ack acknowledge modes.
  • Run as daemon, consume on-demand.
  • Consume number of messages with flag -c NUMBER
  • --help for more features

Purge

  • Purge queue with prompt
  • --help for more features

Usage

Create queue

// TEST_QUEUE_1 created as durable
$ rmqctl create queue TEST_QUEUE_1 -d
done

// TEST_QUEUE_2 created as durable and autodelete
$ rmqctl -d create queue TEST_QUEUE_2 -d -a
done

Create queue in HA mode

rmqctl is able to create queue in HA mode.

Three modes supported: all(default),exactly,nodes

Following command creates TEST_QUEUE_3 queue in HA mode,

which by default it has queue slaves in all other rabbitmq nodes (default: 'all' mode)

rmqctl automatically creates queue's HA policy with name: QueueName_HA

$ rmqctl create queue TEST_QUEUE_3 --HA
done

List all queues

$ rmqctl list queue
|Name         |Vhost |Durable |AutoDelete |MasterNode |Status |Consumers |Policy          |Messages
|TEST_QUEUE_1 |/     |true    |false      |rabbit@r1  |       |0         |                |0
|TEST_QUEUE_2 |/     |true    |true       |rabbit@r1  |       |0         |                |0
|TEST_QUEUE_3 |/     |true    |true       |rabbit@r1  |       |0         |TEST_QUEUE_3_HA |0

List Policy

$ rmqctl list policy
 Name            |Vhost |Pattern      |Priority |ApplyTo |Definition
|TEST_QUEUE_3_HA |/     |TEST_QUEUE_3 |0        |queues  |map[ha-mode:all ha-sync-mode:automatic]

List particular queue in json

$ rmqctl list queue TEST_QUEUE_1 -o json
[
  {
    "name": "TEST_QUEUE_1",
    "vhost": "/",
    "durable": true,
    "auto_delete": false,
    "arguments": {},
    "node": "rabbit@r1",
    "status": "",
    "memory": 10576,
    ...
    }
 ]

Create exchange

$ rmqctl create exchange TEST_EXCHANGE_1 -d -t fanout
done

List all exchanges

$ rmqctl list exchange
 |Name               |Vhost |Type    |Durable |AutoDelete
 |                   |/     |direct  |true    |false
 |TEST_EXCHANGE_1    |/     |fanout  |true    |false
 |amq.direct         |/     |direct  |true    |false
 |amq.fanout         |/     |fanout  |true    |false
 |amq.headers        |/     |headers |true    |false
 |amq.match          |/     |headers |true    |false
 |amq.rabbitmq.trace |/     |topic   |true    |false
 |amq.topic          |/     |topic   |true    |false

List particular exchange in json

$ rmqctl list exchange TEST_EXCHANGE_1 -o json
{
  "name": "TEST_EXCHANGE_1",
  "vhost": "/",
  "type": "fanout",
  "durable": true,
  "auto_delete": false,
  "internal": false,
  "arguments": {},
  "incoming": [],
  "outgoing": []
}

Create queue/exchange binding

rmqctl is able to create exchange bindings as well.

$ rmqctl create bind TEST_EXCHANGE_1 TEST_QUEUE_1 ROUTING_KEY
done
$ rmqctl create bind TEST_EXCHANGE_1 TEST_QUEUE_2 ROUTING_KEY
done

Creates exchange binding
$ rmqctl create bind TEST_EXCHANGE_1 TEST_EXCHANGE_2 ROUTING_KEY -t exchange
done

List queue/exchange binding

$ rmqctl list bind
|Source          |Destination     |Vhost |Key          |DestinationType
|                |TEST_QUEUE_1    |/     |TEST_QUEUE_1 |queue
|                |TEST_QUEUE_2    |/     |TEST_QUEUE_2 |queue
|TEST_EXCHANGE_1 |TEST_QUEUE_1    |/     |RUN          |queue
|TEST_EXCHANGE_1 |TEST_EXCHANGE_2 |/     |RUN          |exchange

Publish message

Publish to a fanout exchange, observing queues bounded to the

exchange TEST_EXCHANGE_1 received the message.

$ rmqctl publish TEST_EXCHANGE_1 RUN "This is a test message"
done

$ rmqctl list queue
|Name         |Vhost |Durable |AutoDelete |MasterNode |Status |Consumers |Policy          |Messages
|TEST_QUEUE_1 |/     |true    |false      |rabbit@r1  |       |0         |                |1
|TEST_QUEUE_2 |/     |true    |true       |rabbit@r1  |       |0         |                |1
|TEST_QUEUE_3 |/     |true    |true       |rabbit@r1  |       |0         |TEST_QUEUE_3_HA |0

Publish message in burst mode

Publish to a fanout exchange in burst mode,

observing queues bounded to the exchange TEST_EXCHANGE_1 received the message.

$ rmqctl publish TEST_EXCHANGE_1 RUN "This is a test message" -b 424242
done

$ rmqctl list queue
|Name         |Vhost |Durable |AutoDelete |MasterNode |Status |Consumers |Policy          |Messages
|TEST_QUEUE_1 |/     |true    |false      |rabbit@r1  |       |0         |                |424243
|TEST_QUEUE_2 |/     |true    |true       |rabbit@r1  |       |0         |                |424243
|TEST_QUEUE_3 |/     |true    |true       |rabbit@r1  |       |0         |TEST_QUEUE_3_HA |0

Publish message from user provided executable

Publish messages generated from user provided executable to the queue.

$ rmqctl publish TEST_EXCHANGE_1 RUN -e "/usr/bin/ls -al"
done

$ rmqctl consume TEST_QUEUE_1
|Message
 drwxr-xr-x 1 vs   users    1566 Mar 16 13:07 Desktop
 drwxr-xr-x 1 vs   users       0 Feb 11 21:25 Documents
 drwxr-xr-x 1 vs   users     616 Mar 17 15:34 Downloads
 drwxr-xr-x 1 vs   users     322 Feb 13 08:40 .fzf

Publish message from STDIN

Publish messages read from STDIN.

$ rmqctl publish TEST_EXCHANGE_1 RUN
hello, rabbitmq!
greetings, rabbitmq!
done

$ rmqctl consume TEST_QUEUE_1
|Message
 hello, rabbitmq!
 greetings, rabbitmq!

$ rmqctl publish TEST_EXCHANGE_1 RUN  <<< "hi, there!"
done

$ rmqctl consume TEST_QUEUE_1
|Message
 hi, there!

equivalent to $ rmqctl publish TEST_EXCHANGE_1 RUN -e "/usr/bin/ls -al"
$ ls -al | rmqctl publish TEST_EXCHANGE_1 RUN
done

$ rmqctl consume TEST_QUEUE_1
|Message
 drwxr-xr-x 1 vs   users    1566 Mar 16 13:07 Desktop
 drwxr-xr-x 1 vs   users       0 Feb 11 21:25 Documents
 drwxr-xr-x 1 vs   users     616 Mar 17 15:34 Downloads
 drwxr-xr-x 1 vs   users     322 Feb 13 08:40 .fzf

Consume message

Consume 3 messages.

$ rmqctl consume TEST_QUEUE_1 -c 3
|Message
This is a test message
This is a test message
This is a test message

Consume message in daemon mode

$ rmqctl consume TEST_QUEUE_2 -d
|Message
This is a test message
This is a test message
...

Purge queue

Purge queue without prompt.

$ rmqctl purge TEST_QUEUE_1 -f
done

Other features including list/update user/vhost/node information, vhost tracing, etc.

--help for more details.

$ rmqctl --help

Contact

Bug, feature requests, welcome to shoot me an email at:

vsdmars<<at>>gmail.com

You can’t perform that action at this time.