skip to content
Alvin Lucillo

Multiple bindings with same exchange

/ 2 min read

An exchange can be associated to multiple bindings. The key here is that we know the destination of a message based on the routing key of an exchange. In the example below, messages will reach either greetingsv2 or greetingsv3 if the routing key is events.hi or events.hello respectively.

➜  rabbitmq docker exec -it rabbitmq rabbitmqadmin get messages --queue=greetingsv2 --ack-mode=ack_requeue_true
┌───────────────┬─────────────┬──────────┬─────────────┬───────────────┬────────────┬─────────┬──────────────────┐
│ payload_bytes │ redelivered │ exchange │ routing_key │ message_count │ properties │ payload │ payload_encoding │
└───────────────┴─────────────┴──────────┴─────────────┴───────────────┴────────────┴─────────┴──────────────────┘
➜  rabbitmq docker exec -it rabbitmq rabbitmqadmin get messages --queue=greetingsv3 --ack-mode=ack_requeue_true
┌───────────────┬─────────────┬──────────┬─────────────┬───────────────┬────────────┬─────────┬──────────────────┐
│ payload_bytes │ redelivered │ exchange │ routing_key │ message_count │ properties │ payload │ payload_encoding │
└───────────────┴─────────────┴──────────┴─────────────┴───────────────┴────────────┴─────────┴──────────────────┘
➜  rabbitmq docker exec -it rabbitmq rabbitmqadmin declare binding --source=events --destination=greetingsv2 --routing-key=events.hello --destination-type=queue
➜  rabbitmq docker exec -it rabbitmq rabbitmqadmin declare binding --source=events --destination=greetingsv3 --routing-key=events.hi --destination-type=queue;
➜  rabbitmq docker exec -it rabbitmq rabbitmqadmin publish message --routing-key=events.hello --payload=henlo --exchange=events 
Message published and routed successfully
➜  rabbitmq docker exec -it rabbitmq rabbitmqadmin get messages --queue=greetingsv2 --ack-mode=ack_requeue_true 
┌───────────────┬─────────────┬──────────┬──────────────┬───────────────┬────────────┬─────────┬──────────────────┐
│ payload_bytes │ redelivered │ exchange │ routing_key  │ message_count │ properties │ payload │ payload_encoding │
├───────────────┼─────────────┼──────────┼──────────────┼───────────────┼────────────┼─────────┼──────────────────┤
│ 5             │ false       │ events   │ events.hello │ 0             │            │ henlo   │ string           │
└───────────────┴─────────────┴──────────┴──────────────┴───────────────┴────────────┴─────────┴──────────────────┘
➜  rabbitmq docker exec -it rabbitmq rabbitmqadmin get messages --queue=greetingsv3 --ack-mode=ack_requeue_true 
┌───────────────┬─────────────┬──────────┬─────────────┬───────────────┬────────────┬─────────┬──────────────────┐
│ payload_bytes │ redelivered │ exchange │ routing_key │ message_count │ properties │ payload │ payload_encoding │
└───────────────┴─────────────┴──────────┴─────────────┴───────────────┴────────────┴─────────┴──────────────────┘
➜  rabbitmq docker exec -it rabbitmq rabbitmqadmin publish message --routing-key=events.hi --payload=hiya --exchange=events
Message published and routed successfully
➜  rabbitmq docker exec -it rabbitmq rabbitmqadmin get messages --queue=greetingsv2 --ack-mode=ack_requeue_true 
┌───────────────┬─────────────┬──────────┬──────────────┬───────────────┬────────────┬─────────┬──────────────────┐
│ payload_bytes │ redelivered │ exchange │ routing_key  │ message_count │ properties │ payload │ payload_encoding │
├───────────────┼─────────────┼──────────┼──────────────┼───────────────┼────────────┼─────────┼──────────────────┤
│ 5             │ true        │ events   │ events.hello │ 0             │            │ henlo   │ string           │
└───────────────┴─────────────┴──────────┴──────────────┴───────────────┴────────────┴─────────┴──────────────────┘
➜  rabbitmq docker exec -it rabbitmq rabbitmqadmin get messages --queue=greetingsv3 --ack-mode=ack_requeue_true 
┌───────────────┬─────────────┬──────────┬─────────────┬───────────────┬────────────┬─────────┬──────────────────┐
│ payload_bytes │ redelivered │ exchange │ routing_key │ message_count │ properties │ payload │ payload_encoding │
├───────────────┼─────────────┼──────────┼─────────────┼───────────────┼────────────┼─────────┼──────────────────┤
│ 4             │ false       │ events   │ events.hi   │ 0             │            │ hiya    │ string           │
└───────────────┴─────────────┴──────────┴─────────────┴───────────────┴────────────┴─────────┴──────────────────┘