赞
踩
使用 django环境运行单独命令,django项目中 Rabbitmq的使用,django中使用Rabbitmq监听端进行阻塞监听
RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器端是用Erlang语言编写的,支持多种客户端,用于分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。
耗时任务放入消息队列中。
django+celery+ RabbitMQ实现异步任务最完整教程
rabbitMq需要erlang语言的支持,所以就先安装erlang。
sudo apt-get install erlang-nox
sudo apt-get update
sudo apt-get install rabbitmq-server
# 启动服务
systemctl start rabbitmq-server
# 关闭服务
systemctl stop rabbitmq-server
# 重启服务
systemctl restart rabbitmq-server
# 查看服务状态
systemctl status rabbitmq-server
# 启动服务
rabbitmq-server
RabbitMQ有一套默认的配置,能够满足日常开发需求,如果需要修改,可根据自己的需求创建一个配置文件。
sudo gedit /etc/rabbitmq/rabbitmq.conf
配置文件示例
https://rabbitmq.com/configure.html配置说明
https://www.rabbitmq.com/configure.html#config-items
cd /usr/lib/rabbitmq/bin/
sudo ./rabbitmqctl status
sudo gedit rabbitmqctl
HOME=/var/lib/rabbitmq
sudo rabbitmqctl add_vhost vhost
ps -ef|grep rabbit
# 默认操作命令路径位置
cd /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.10/sbin
# 启用控制台
rabbitmq-plugins enable rabbitmq_management
或者
sudo ./rabbitmq-plugins enable rabbitmq_management
# 重启服务
service rabbitmq-server restart
浏览器访问:http://127.0.0.1:15672
账号:guest
密码:administrator
RabbitMQ有一个默认的用户"guest",该用户默认只能通过本机访问,要让其他机器(局域网)可以访问,需要创建一个新用户,并为其分配权限,请参考下文:用户角色相关、用户权限相关。
账号:guest
密码:administrator
sudo rabbitmqctl list_users
# Username为用户名,Password为用户密码
sudo rabbitmqctl add_user Username Password
sudo rabbitmqctl delete_user Username
sudo rabbitmqctl change_password guest administrator
按照个人理解,用户角色可分为五类,超级管理员, 监控者, 策略制定者, 普通管理者以及其他。
(1) 超级管理员(administrator)
可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。
(2) 监控者(monitoring)
可登陆管理控制台(启用management plugin的情况下),同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)
(3) 策略制定者(policymaker)
可登陆管理控制台(启用management plugin的情况下), 同时可以对policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)。与administrator的对比,administrator能看到这些内容
(4) 普通管理者(management)
仅可登陆管理控制台(启用management plugin的情况下),无法看到节点信息,也无法对策略进行管理。
# User为用户名, Tag为角色名(对应于上面的administrator,monitoring,policymaker,management,或其他自定义名称)
rabbitmqctl set_user_tags User Tag
# Username为用户名,administrator为超级管理员角色
sudo rabbitmqctl set_user_tags [Username] administrator
rabbitmqctl set_user_tags hncscwc monitoring policymaker
用户权限指的是用户对exchange,queue的操作权限,包括配置权限,读写权限。配置权限会影响到exchange,queue的声明和删除。读写权限影响到从queue里取消息,向exchange发送消息以及queue和exchange的绑定(bind)操作。
例如: 将queue绑定到某exchange上,需要具有queue的可写权限,以及exchange的可读权限;向exchange发送消息需要具有exchange的可写权限;从queue里取数据需要具有queue的可读权限。详细请参考官方文档中"How permissions work"部分。
rabbitmqctl set_permissions -p VHostPath User ConfP WriteP ReadP
rabbitmqctl set_permissions -p / [User] ".*" ".*" ".*"
sudo rabbitmqctl set_permissions -p vhost myuser ".*" ".*" ".*"
rabbitmqctl list_permissions [-p VHostPath]
rabbitmqctl list_user_permissions User
rabbitmqctl clear_permissions [-p VHostPath] User
python 连接操作rabbitMQ 主要是使用pika库,Pika是用于Python的RabbitMQ(AMQP 0-9-1)客户端库。
pip install pika
ERROR: node with name "rabbit" already running on "localhost".
ERROR: node with name “rabbit” already running on "localhost"解决方法
解决办法:
重复输入指令
sudo rabbitmqctl status
sudo rabbitmqctl stop
rabbitmq-server
错误原因:
账号密码错误
解决方案:
1. 查看rabbitmq用户
sudo rabbitmqctl list_users
2. 修改密码
sudo rabbitmqctl change_password guest administrator
pika.exceptions.IncompatibleProtocolError: StreamLostError: ('Transport indicated EOF',)
错误原因:
端口错误
我将port写成了15672,rabbitmq需要通过端口5672连接,而不是15672
解决方法:
port = 15672
改为
port = 5672
TypeError: basic_consume() got multiple values for argument 'queue'
TypeError: basic_consume() got multiple values for argument ‘queue’
错误原因:
API接口的参数发生更改
解决方法:
channel.basic_consume(callback, queue=‘celery’, no_ack=True)
改为
channel.basic_consume(‘celery’,callback, False)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。