RabbitMQ是一个由Erlang语言开发的AMQP的开源实现。
rabbitMQ是一款基于AMQP协议的消息中间件,它能够在应用之间提供可靠的消息传输。在易用性,扩展性,高可用性上表现优秀。使用消息中间件利于应用之间的解耦,生产者(客户端)无需知道消费者(服务端)的存在。而且两端可以使用不同的语言编写,大大提供了灵活性。
中文文档
#安装配置epel源 rpm -ivh http://dl.fedoraproject.org/pub/epel/6/i386/epel -释放- 6 - 8. - noarch.rpm #安装erlang 百胜是安装erlang #安装RabbitMQ 百胜是安装rabbitmq服务器 #启动/停止 服务rabbitmq服务器启动/停止
<强>简单模式强>
生产者
导入鼠兔 连接=pika.BlockingConnection(鼠兔。ConnectionParameters(主机=' localhost ')) 频道=connection.channel () channel.queue_declare(队列='你好') channel.basic_publish(交换=", routing_key='你好', 身体=癏ello World !”) 打印(“[x]发送“Hello World !”) connection.close ()
消费者
连接=pika.BlockingConnection (pika.ConnectionParameters(主机=' localhost ')) 频道=connection.channel () channel.queue_declare(队列='你好') def回调(ch、方法、属性、身体): 打印(“[x]收到% r " %的身体) 通道。basic_consume(回调, 队列='你好', no_ack=True) 打印(“[*]等待消息。退出按CTRL + C”) channel.start_consuming () >之前<强>相关参数强>
1, no-ack=False
如果消费者遇到情况(关闭通道,连接关闭,或TCP连接丢失)挂掉了,那么,RabbitMQ会重新将该任务添加到队列中。
-
<李>回调函数中的ch.basic_ack (delivery_tag=method.delivery_tag) 李>
<李> basic_comsume中的no_ack=False李>
接收消息端应该这么写:
导入鼠兔 连接=pika.BlockingConnection (pika.ConnectionParameters ( 主机=' 10.211.55.4 ')) 频道=connection.channel () channel.queue_declare(队列='你好') def回调(ch、方法、属性、身体): 打印(“[x]收到% r " %的身体) 导入的时间 time . sleep (10) 打印“ok” ch.basic_ack (delivery_tag=method.delivery_tag) channel.basic_consume(回调, 队列='你好', no_ack=False) 打印(“[*]等待消息。退出按CTRL + C”) channel.start_consuming () >之前2,耐用:消息不丢失
生产者
导入鼠兔 连接=pika.BlockingConnection (pika.ConnectionParameters(主机=' 10.211.55.4 ')) 频道=connection.channel () #让消息持久 通道。queue_declare(队列=愫谩?持久=True) channel.basic_publish(交换=", routing_key='你好', 身体=癏ello World !” 属性=pika.BasicProperties ( delivery_mode=2, #消息持久 )) 打印(“[x]发送“Hello World !”) connection.close ()<强> 3,消息获取顺序强>
默认消息队列里的数据是按照顺序被消费者拿走,例如:消费者1去队列中获取奇数序列的任务,消费者1去队列中获取偶数序列的任务。
channel.basic_qos (prefetch_count=1)表示谁来谁取,不再按照奇偶数排列
导入鼠兔 连接=pika.BlockingConnection (pika.ConnectionParameters(主机=' 10.211.55.4 ')) 频道=connection.channel () #让消息持久 channel.queue_declare(队列='你好') def回调(ch、方法、属性、身体): 打印(“[x]收到% r " %的身体) 导入的时间 time . sleep (10) 打印“ok” ch.basic_ack (delivery_tag=method.delivery_tag) channel.basic_qos (prefetch_count=1) channel.basic_consume(回调, 队列='你好', no_ack=False) 打印(“[*]等待消息。退出按CTRL + C”) channel.start_consuming ()Python操作rabbitMQ的示例代码