Created
February 25, 2016 14:19
-
-
Save fforbeck/868462c0f7664d92e19e to your computer and use it in GitHub Desktop.
RabbitMQ - Command Line Setup. Create queue, bindings, exchanges with rabbitmqadmin and rabbitmqctl
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
URL="http://localhost:15672/cli/rabbitmqadmin" | |
VHOST="<>" | |
USER="<>" | |
PWD="<>" | |
QUEUE="<>" | |
FAILED_QUEUE="<>" | |
INPUT_EX="<>" | |
FAILED_INPUT_EX="<>" | |
set_user_and_vhost() { | |
rabbitmqctl add_vhost $VHOST | |
rabbitmqctl list_vhosts | |
rabbitmqctl add_user $USER $PWD | |
rabbitmqctl set_user_tags $USER administrator | |
rabbitmqctl list_users | |
} | |
set_permissions() { | |
rabbitmqctl set_permissions -p $VHOST $USER ".*" ".*" ".*" | |
rabbitmqctl list_permissions -p $VHOST | |
} | |
set_exchanges() { | |
rabbitmqadmin declare exchange --vhost=$VHOST --user=$USER --password=$PWD name=$INPUT_EX type=direct durable=true | |
rabbitmqadmin declare exchange --vhost=$VHOST --user=$USER --password=$PWD name=$FAILED_INPUT_EX type=direct durable=true | |
rabbitmqctl list_exchanges -p $VHOST | |
} | |
set_queues() { | |
rabbitmqadmin declare queue --vhost=$VHOST --user=$USER --password=$PWD name=$QUEUE durable=true | |
rabbitmqadmin declare queue --vhost=$VHOST --user=$USER --password=$PWD name=$FAILED_QUEUE durable=true | |
rabbitmqctl list_queues -p $VHOST | |
} | |
set_bindings() { | |
rabbitmqadmin declare binding --vhost=$VHOST --user=$USER --password=$PWD source=$INPUT_EX destination=$QUEUE | |
rabbitmqadmin declare binding --vhost=$VHOST --user=$USER --password=$PWD source=$FAILED_INPUT_EX destination=$FAILED_QUEUE | |
rabbitmqctl list_bindings -p $VHOST | |
} | |
type rabbitmqctl > /dev/null 2>&1 || { echo >&2 "rabbitmqctl is required but it is not installed. Aborting."; exit 1; } | |
type rabbitmqadmis > /dev/null 2>&1 || { echo >&2 "rabbitmqadmin is required but it is not installed. | |
Download from $URL, add .py extension and install into /usr/local/bin/rabbitmqadmin. | |
Aborting."; exit 1; } | |
set_user_and_vhost | |
set_permissions | |
set_exchanges | |
set_queues | |
set_bindings | |
echo "Rabbitmq configured with success." |
Where to run this on windows?
My variant
scripts/rabbitmq-migrate
#!/bin/bash -e
#
# based on https://gist.github.com/fforbeck/868462c0f7664d92e19e
#
# check dependencies are installed
type rabbitmqctl > /dev/null 2>&1 || { echo >&2 "rabbitmqctl is required but it is not installed. Aborting."; exit 1; }
type rabbitmqadmin > /dev/null 2>&1 || { echo >&2 "rabbitmqadmin is required but it is not installed. Aborting."; exit 1; }
# check auth credentials are present
[ -z "$RABBITMQ_USER" ] && { echo >&2 "RABBITMQ_USER variable should be present. Aborting."; exit 1; }
[ -z "$RABBITMQ_PASS" ] && { echo >&2 "RABBITMQ_PASS variable should be present. Aborting."; exit 1; }
[ -z "$RABBITMQ_HOST" ] && { echo >&2 "RABBITMQ_HOST variable should be present. Aborting."; exit 1; }
[ -z "$RABBITMQ_PORT" ] && { echo >&2 "RABBITMQ_PORT variable should be present. Aborting."; exit 1; }
# helpers
function rabbitmqadmin_cli () {
rabbitmqadmin \
--vhost=/ \
--username="${RABBITMQ_USER}" \
--password="${RABBITMQ_PASS}" \
--host="${RABBITMQ_HOST}" \
--port="${RABBITMQ_PORT}" \
${@}
}
# set queues
rabbitmqadmin_cli declare queue name=mails durable=true
echo ""
rabbitmqadmin_cli list queues
echo ""
# set bindings
rabbitmqadmin_cli declare binding source="amq.direct" destination=mails routing_key="mails"
echo ""
rabbitmqadmin_cli list bindings
echo ""
echo "Rabbitmq configured with success."
Makefile
feature_tests_dev_rabbitmq_drop:
./scripts/docker-volume-rm-if-exists myapp_feature_tests_dev_rabbitmq_data
feature_tests_dev_rabbitmq_migrate:
docker-compose \
-p "$(PROJECT_NAME)_feature_tests_dev" \
-f docker/feature_tests_dev.yml \
run --rm rabbitmq_migrator bash -c '\
/bin/waitforit -host=$$RABBITMQ_HOST -port=$$RABBITMQ_PORT && \
/bin/rabbitmq-migrate'
feature_tests_dev_rabbitmq_recreate:
$(MAKE) feature_tests_dev_rabbitmq_drop
$(MAKE) feature_tests_dev_rabbitmq_migrate
docker-compose.yml
rabbitmq_migrator:
image: rabbitmq:3-management # rabbitmq:3-management = rabbitmq:3 + admin panel
command: bash -c "/bin/true" # do nothing on `docker-compose up`
environment:
RABBITMQ_USER: admin
RABBITMQ_PASS: adminpass
RABBITMQ_HOST: rabbitmq
RABBITMQ_PORT: 15672 # default port
# RABBITMQ_ERLANG_COOKIE: secret # required only for rabbitmqctl, rabbitmqadmin uses http auth instead
volumes:
- ../scripts/rabbitmq-migrate:/bin/rabbitmq-migrate:ro
- ../scripts/waitforit:/bin/waitforit:ro
depends_on:
- rabbitmq
# RabbitMQ instance can be used to consolidate events that originated in your database/application.
# You can connect here with different consumers and take actions based on those events (like sending signup emails)
rabbitmq:
image: rabbitmq:3-management # rabbitmq:3-management = rabbitmq:3 + admin panel
hostname: myapp-rabbit # the hostname is required to make data persisntent
ports:
- 5672:5672 # default port
- 15672:15672 # admin panel port
environment:
RABBITMQ_DEFAULT_USER: admin
RABBITMQ_DEFAULT_PASS: adminpass
volumes:
- rabbitmq_data:/var/lib/rabbitmq
restart: unless-stopped
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
this is bash file, but rabbitmqadmin command is not working on the command line. Hw does it work?