Automate rabbitmq vhost's configuration creation / update
composer require olaurendeau/rabbit-mq-admin-toolkit-bundle
Add RabbitMqAdminToolkitBundle to your bundles
// config/bundles.php
<?php
return [
...
Ola\RabbitMqAdminToolkitBundle\OlaRabbitMqAdminToolkitBundle::class => ['all' => true]
...
];
Update your configuration
# config/packages/ola_rabbit_mq_admin_toolkit.yaml
ola_rabbit_mq_admin_toolkit:
delete_allowed: true # Allow deletion of exchange, queues and binding for updating configuration. Shouldn't be enabled in production
connections:
default: http://user:password@localhost:15672
vhosts:
default:
name: /my_vhost
permissions:
user: ~
exchanges:
exchange.a: ~
queues:
queue.a:
bindings:
- { exchange: exchange.a, routing_key: "a.#" }
- { exchange: exchange.a, routing_key: "b.#" }
Simply run app/console rabbitmq:vhost:define
.
See app/console config:dump-reference OlaRabbitMqAdminToolkitBundle
for full configuration possibilities
# config/packages/ola_rabbit_mq_admin_toolkit.yaml
ola_rabbit_mq_admin_toolkit:
delete_allowed: true # Allow deletion of exchange, queues and binding for updating configuration. Shouldn't be enabled in production
default_vhost: test # default is "default"
silent_failure: true # Catch all exceptions in commands. Could be use in test environment if no rabbitmq available
connections:
default: http://user:password@localhost:15672
vm: http://user:[email protected]:15672
vhosts:
test:
name: /test
connection: vm # default is "default"
permissions:
user: ~
exchanges:
exchange.a:
durable: false # default is "true"
exchange.b:
type: direct # default is "topic"
exchange.c: ~
queues:
queue.a:
durable: false # default is "true"
arguments: # define arguments
x-message-ttl: 5000
bindings:
- { exchange: exchange.a, routing_key: "a.#" }
- { exchange: exchange.b, routing_key: "b.#" }
queue.b:
bindings:
- { exchange: exchange.a, routing_key: "a.#" }
- { exchange: exchange.b, routing_key: "b.#" }
- { exchange: exchange.c, routing_key: "c.#" }
queue.c:
bindings:
- { exchange: exchange.a, routing_key: "a.#" }
- { exchange: exchange.c, routing_key: "c.#" }
Sharding queues can be useful to process huge amount of messages.
# config/packages/ola_rabbit_mq_admin_toolkit.yaml
ola_rabbit_mq_admin_toolkit:
delete_allowed: true # Allow deletion of exchange, queues and binding for updating configuration. Shouldn't be enabled in production
connections:
default: http://user:password@localhost:15672
vhosts:
default:
name: /my_vhost
permissions:
user: ~
exchanges:
exchange.a: ~
queues:
queue.a.sharded:
name: "queue.a.{modulus}"
modulus: 5
bindings:
- { exchange: exchange.a, routing_key: "a.{modulus}.#" }
- { exchange: exchange.a, routing_key: "b.#" }
It will produce the following configuration :