Automate rabbitmq vhost's configuration creation / update
Add RabbitMqAdminToolkitBundle to your composer.json, then update
{
...
"require": {
"olaurendeau/rabbit-mq-admin-toolkit-bundle": "~1.0"
},
...
}
Add RabbitMqAdminToolkitBundle to your application kernel
// app/AppKernel.php
public function registerBundles()
{
return array(
// ...
new Ola\RabbitMqAdminToolkitBundle\OlaRabbitMqAdminToolkitBundle(),
// ...
);
}
Update your configuration
# app/config/config.yml
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
# app/config/config.yml
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:password@192.168.1.1: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 usefull for processing huge amount of messages.
# app/config/config.yml
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 :