MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。
MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取队列中的消息。
稳定,支持高可用的队列
基于中央节点,在路由,均衡负载,消息持久化的应用都很方便
支持多种协议的消息传送
支持多种语言的客户端
sudo apt install rabbitmq-server
sudo apt update
sudo service rabbitmq-server start
sudo service rabbitmq-server stop
send:
receive:
ack标示为true时,代表发送一次就删除,当receive故障时可能会造成消息丢失,而false时会等待发送结果,如果失败会重新发送)
basic.qos:代表调度规则,每次发送n条消息到消费端
"发布者(producer)只需把消息发送给一个交换机(exchange )。交换机非常简单,它一边从发布者接收消息,一边把消息消息推送到队列。交换机必须知道如何处理它接收的消息,是应该推送到指定的队列还是多个队列,或者是直接忽略消息。这些规则是通过交换机类型(exchange type)来定义的。"
重点:channel.exchange_declare(exchange='exchange_name', type='exchange_type' // 交换机定义
channel.queue_bind(exchange='exchange_name', queue=queue_name) //队列与交换机绑定
重点:channel.exchange_declare(exchange='logs', type='direct') // 交换机定义,type是直连
channel.basic_publish(exchange='logs',routing_key='info',body=message) //消息发布 channel.queue_bind(exchange=exchange_name,queue=queue_name,routing_key='info') //消费绑定
* :可以替代一个单词
#:可以替代0或者更多的单词
当一个队列的绑定键为 "#" ,这个队列将会无视消息的路由键,接收所有的消息。
当 * 和 # 这两个特殊字符都未在绑定键中出现的时候,此时主题交换机就拥有的直连交换机的行为。
重点:channel.exchange_declare(exchange='logs', type='topic') //交换机定义,type为topic
routing_key = 'aa.error' // 路由key定义
channel.basic_publish(exchange='logs',routing_key=routing_key, body=message) //消息发布
binding_key='*.error' //绑定key定义(模糊匹配)
channel.queue_bind(exchange=exchange_name,queue=queue_name,routing_key=binding_key) //消费绑定