RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件。RabbitMQ服务器是用Erlang语言编写的,它可以为你的应用提供一个通用的消息发送和接收平台,并且保证消息在传输过程中的安全,RabbitMQ官网,RabbitMQ中文文档。
安装RabbitMQ
安装EPEL源
[root@anshengme ~]# yum -y install epel-release
安装erlang
[root@anshengme ~]# yum -y install erlang
安装RabbitMQ
[root@anshengme ~]# yum -y install rabbitmq-server
启动并设置开机器启动
在启动RabbitMQ
之前需要hostname的解析,要不然启动不起来
[root@anshengme ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 anshengme
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@anshengme ~]# systemctl start rabbitmq-server
[root@anshengme ~]# systemctl enable rabbitmq-server
Created symlink from /etc/systemd/system/multi-user.target.wants/rabbitmq-server.service to /usr/lib/systemd/system/rabbitmq-server.service.
查看启动状态
在学习过程中有什么不懂得可以加我的
python学习交流扣扣qun,784758214
群里有不错的学习视频教程、开发工具与电子书籍。
与你分享python企业当下人才需求及怎么从零基础学习好python,和学习什么内容
[root@anshengme ~]# netstat -tulnp |grep 5672
tcp 0 0 0.0.0.0:25672 0.0.0.0:* LISTEN 37507/beam.smp
tcp6 0 0 :::5672 :::* LISTEN 37507/beam.smp
pika
pika
模块是官方认可的操作RabbitMQ
的API接口。
安装pika
pip3 install pika
pika:https://pypi.python.org/pypi/pika
测试
>>> import pika
Work Queues
如果你启动了多个消费者,那么生产者生产的任务会根据顺序的依次让消费者来执行,这就是Work Queues
模式
生产者代码
在学习过程中有什么不懂得可以加我的
python学习交流扣扣qun,784758214
群里有不错的学习视频教程、开发工具与电子书籍。
与你分享python企业当下人才需求及怎么从零基础学习好python,和学习什么内容
# _*_ codin:utf-8 _*_
import pika
# 连接到RabbitMQ 这是一个阻塞的连接
connection = pika.BlockingConnection(pika.ConnectionParameters('192.168.56.100'))
# 生成一个管道
channel = connection.channel()
# 通过管道创建一个队列
channel.queue_declare(queue='hello')
# 在队列内发送数据,body内容,routing_key队列,exchange交换器,通过交换器往hello队列内发送Hello World!数据
channel.basic_publish(exchange='', routing_key='hello', body='Hello World!')
# 关闭连接
connection.close()
消费者代码
# _*_ codin:utf-8 _*_
import pika
# 连接到RabbitMQ 这是一个阻塞的连接
connection = pika.BlockingConnection(pika.ConnectionParameters('192.168.56.100'))
# 生成一个管道
channel = connection.channel()
# 如果消费者连接到这个队列的时候,队列没有生成,那么消费者就生成这个队列,如果这个队列已经生成了,那么就忽略它
channel.queue_declare(queue='hello')
# 回调函数
def callback(ch, method, properties, body):
print(" [x] Received %r" % body)
# 消费,当收到hello队列的消息的时候就,就调用callback函数,no_ack消费者在处理任务的时候要不需要确认任务已经处理完成,改为False则要确认
channel.basic_consume(callback, queue='hell