在RabbitMQ中,Routing Key是用于将消息路由到Exchange中的队列的关键字。当消息发布到Exchange时,Exchange会根据Routing Key将消息路由到一个或多个队列中。
以下是RMQ中Routing Key的完整攻略:
- Routing Key的格式
Routing Key的格式取决于Exchange的类型。对于Direct Exchange,Routing Key是一个字符串,用于将消息路由到与Routing Key完全匹配的队列中。对于Topic Exchange,Routing Key是一个由单词和点号组成的字符串,用于将路由到与Routing Key模式匹配的队列中。
- 示例
以下是使用Python客户端库将消息路由到Direct Exchange的示例:
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.exchange_declare(exchange='direct_logs', exchange_type='direct')
channel.queue_declare(queue='my_queue1')
channel.queue_declare(queue='my_queue2')
channel.queue_bind(queue='my_queue1', exchange='direct_logs', routing_key='my_routing_key')
channel.queue_bind(queue='my_queue2', exchange='direct_logs', routing_key='my_routing_key')
channel.basic_publish(exchange='direct_logs', routing_key='my_routing_key', body='Hello, World!')
connection.close()
在上面的示例中,我们使用Python客户端库创建了一个名为“direct_logs”的Direct Exchange,并将exchange_type
参数设置为direct
。我们还创建了两个名为“my_queue1”和“my_queue2”的队列,并使用queue_bind
方法将Exchange和队列绑定。我们将routing_key
参数设置为“my_routing_key”,这意味着消息将路由到与Routing Key完全匹配的队列中。
以下是使用Python客户端库将消息路由到Topic Exchange的示例:
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.exchange_declare(exchange='topic_logs', exchange_type='topic')
channel.queue_declare(queue='my_queue1')
channel.queue_declare(queue='my_queue2')
channel.queue_bind(queue='my_queue1', exchange='topic_logs', routing_key='*.info')
channel.queue_bind(queue='my_queue2', exchange='topic_logs', routing_key='*.error')
channel.basic_publish(exchange='topic_logs', routing_key='my.info', body='Hello, World!')
channel.basic_publish(exchange='topic_logs', routing_key='my.error', body='Hello, World!')
connection.close()
在上面的示例中,我们使用Python客户端库创建了一个名为“topic_logs”的Topic Exchange,并将exchange_type
参数设置为topic
。我们还创建了两个名为“my_queue1”和“my_queue2”的队列,并使用queue_bind
方法将Exchange和队列绑定。我们将routing_key
参数设置为“.info”和“.error”,这意味着消息将路由到与Routing Key模式匹的队列中。在这个例子中,“my.info”将路由到“my_queue1”,而“my.error”将路由到“my_queue2”。