RabbitMQ中交换机的消息分发机制

RabbitMQ是一个消息代理,它接受和转发消息,是一个由 Erlang 语言开发的遵循AMQP协议的开源实现。在RabbitMQ中生产者不会将消息直接发送到队列当中,而是将消息直接发送到交换机(exchange),交换机用来接受生产者发送的消息并将这些消息发送给绑定的队列,即:生产者-->交换机-->队列。

在RabbitMQ中最主要的三种交换机:1. fanout(广播交换机)  2. direct(直连交换机)  3. topic(话题交换机)

1. fanout(广播交换机)

 fanout会将接受到的所有消息广播到它所绑定的所有队列当中(每个消费者都会收到所有的消息),对于广播交换机,消息路由键routing_key和队列绑定键routing_key的作用都会被忽略。

fanout生产者:

 

RabbitMQ中交换机的消息分发机制

RabbitMQ中交换机的消息分发机制

1 import pika 2 3 4 class RabbitProducer(object): 5 """ 6 与RabbitMq服务器建立连接 7 """ 8 9 def __init__(self): 10 self.conn = pika.BlockingConnection( 11 pika.ConnectionParameters(host='localhost', port=5672) 12 ) 13 self.channel = self.conn.channel() 14 15 # 声明一个exchange交换机,交换机的类型为fanout广播. 16 self.channel.exchange_declare( 17 exchange='fanout_exchange', exchange_type='fanout', durable=True 18 ) 19 20 def send_msg(self, message): 21 """ 22 routing_key:绑定的key 23 :param message: 24 :return: 25 """ 26 self.channel.basic_publish( 27 exchange='fanout_exchange', 28 routing_key='', # 因为exchange的类型为fanout,所以routing_key的数值在这里将被忽略 29 body=message, 30 properties=pika.BasicProperties( 31 delivery_mode=2, 32 # 消息进行持久化(防止服务器挂掉.)===> 如果没有queue绑定到这个exchange交换机,这个参数是没有的. 33 )) 34 35 def close(self): 36 self.conn.close() 37 38 39 if __name__ == "__main__": 40 rabbit_producer = RabbitProducer() 41 for i in range(10): 42 message = 'hello world {}!'.format(i) 43 rabbit_producer.send_msg(message)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpzdjf.html