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 │
└───────────────┴─────────────┴──────────┴─────────────┴───────────────┴────────────┴─────────┴──────────────────┘