当前位置:   article > 正文

RabbitMQ消息队列详细教程_pika.exceptions.incompatibleprotocolerror: streaml

pika.exceptions.incompatibleprotocolerror: streamlosterror: ('transport indi

一、参考资料

RabbitMQ官网

RabbitMQ Tutorials

Linux下安装RabbitMQ(亲测成功)

rabbitmq的web管理界面无法使用guest用户登录

Celery 全面学习笔记

使用 django环境运行单独命令,django项目中 Rabbitmq的使用,django中使用Rabbitmq监听端进行阻塞监听

二、相关介绍

RabbitMQ是实现了高级消息队列协议(AMQP)开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器端是用Erlang语言编写的,支持多种客户端,用于分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

1. 消息队列处理流程

耗时任务放入消息队列中

  1. 接收这个任务的请求;
  2. 将这个任务添加到队列中;
  3. 立即返回「操作成功,正在后台处理」的字样;
  4. 后台消费这个队列,执行这个任务

三、常用操作

1. 安装rabbitMq

Ubuntu16.04 安装RabbitMQ

django+celery+ RabbitMQ实现异步任务最完整教程

1.1 安装erlang依赖库

rabbitMq需要erlang语言的支持,所以就先安装erlang。

sudo apt-get install erlang-nox
  • 1

1.2 安装rabbitMq

sudo apt-get update
sudo apt-get install rabbitmq-server
  • 1
  • 2

2. rabbitmq-server相关

# 启动服务
systemctl start rabbitmq-server

# 关闭服务
systemctl stop rabbitmq-server

# 重启服务
systemctl restart rabbitmq-server

# 查看服务状态
systemctl status rabbitmq-server

# 启动服务
rabbitmq-server
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

3. RabbitMQ配置信息

RabbitMQ有一套默认的配置,能够满足日常开发需求,如果需要修改,可根据自己的需求创建一个配置文件。

sudo gedit /etc/rabbitmq/rabbitmq.conf
  • 1

配置文件示例
https://rabbitmq.com/configure.html

配置说明
https://www.rabbitmq.com/configure.html#config-items

4. rabbitmqctl相关

4.1 查看Rabbit的状态

cd /usr/lib/rabbitmq/bin/
sudo ./rabbitmqctl status
  • 1
  • 2

4.2 修改rabbitmqctl文件

sudo gedit rabbitmqctl
  • 1
HOME=/var/lib/rabbitmq
  • 1

4.3 添加虚拟环境

sudo rabbitmqctl add_vhost vhost
  • 1

4.4 查看RabbitMQ的情况

ps -ef|grep rabbit
  • 1

5. Management控制台相关

5.1 启用控制台

# 默认操作命令路径位置
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 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

5.2 查看web管理器

浏览器访问:http://127.0.0.1:15672

5.3 账号密码登录

账号:guest 
密码:administrator
  • 1
  • 2

6. 用户管理相关

6.1 管理员用户

RabbitMQ有一个默认的用户"guest",该用户默认只能通过本机访问,要让其他机器(局域网)可以访问,需要创建一个新用户,并为其分配权限,请参考下文:用户角色相关、用户权限相关。

账号:guest 
密码:administrator
  • 1
  • 2

6.2 查看用户

sudo rabbitmqctl list_users
  • 1

6.3 添加用户

# Username为用户名,Password为用户密码
sudo rabbitmqctl add_user Username Password
  • 1
  • 2

6.4 删除一个用户

sudo rabbitmqctl delete_user Username
  • 1

6.5 修改密码

sudo rabbitmqctl change_password guest administrator
  • 1

7. 用户角色相关

按照个人理解,用户角色可分为五类,超级管理员, 监控者, 策略制定者, 普通管理者以及其他。
(1) 超级管理员(administrator)
可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。

(2) 监控者(monitoring)
可登陆管理控制台(启用management plugin的情况下),同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)

(3) 策略制定者(policymaker)
可登陆管理控制台(启用management plugin的情况下), 同时可以对policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)。与administrator的对比,administrator能看到这些内容

(4) 普通管理者(management)

仅可登陆管理控制台(启用management plugin的情况下),无法看到节点信息,也无法对策略进行管理。

7.1 设置用户角色

# User为用户名, Tag为角色名(对应于上面的administrator,monitoring,policymaker,management,或其他自定义名称)
rabbitmqctl set_user_tags User Tag
  • 1
  • 2

7.2 给用户分配administrator 超级管理员角色

# Username为用户名,administrator为超级管理员角色
sudo rabbitmqctl set_user_tags [Username] administrator
  • 1
  • 2

7.3 给同一用户设置多个角色

rabbitmqctl set_user_tags hncscwc monitoring policymaker
  • 1

8. 用户权限相关

用户权限指的是用户对exchange,queue的操作权限,包括配置权限,读写权限。配置权限会影响到exchange,queue的声明和删除。读写权限影响到从queue里取消息,向exchange发送消息以及queue和exchange的绑定(bind)操作。

例如: 将queue绑定到某exchange上,需要具有queue的可写权限,以及exchange的可读权限;向exchange发送消息需要具有exchange的可写权限;从queue里取数据需要具有queue的可读权限。详细请参考官方文档中"How permissions work"部分。

8.1 设置用户权限

rabbitmqctl set_permissions -p VHostPath User ConfP WriteP ReadP
  • 1

8.2 设置用户拥有所有权限

rabbitmqctl set_permissions -p / [User] ".*" ".*" ".*"
  • 1

8.3 设置用户在虚拟环境下拥有所有权限

sudo rabbitmqctl set_permissions -p vhost myuser ".*" ".*" ".*"
  • 1

8.4 查看(指定hostpath)所有用户的权限信息

rabbitmqctl list_permissions [-p  VHostPath]
  • 1

8.5 查看用户的权限信息

rabbitmqctl list_user_permissions User
  • 1

8.6 清除用户的权限信息

rabbitmqctl clear_permissions [-p VHostPath] User
  • 1

9. python操作rabbitmq

python使用pika操作rabbitmq总结(一)

RabbitMQ文档

Introduction to Pika

python 使用 RabbitMQ

python 连接操作rabbitMQ 主要是使用pika库,Pika是用于Python的RabbitMQ(AMQP 0-9-1)客户端库。

pip install pika
  • 1

10. rabbitmq集群

Ubuntu 安装rabbitmq集群

四、FAQ

Q: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
  • 2
  • 3
  • 4
  • 5
  • 6

Q:rabbitmq登录失败

错误原因:
账号密码错误

解决方案:
1. 查看rabbitmq用户
sudo rabbitmqctl list_users

2. 修改密码
sudo rabbitmqctl change_password guest administrator
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

Q:pika.exceptions.IncompatibleProtocolError: StreamLostError: ('Transport indicated EOF',)

错误原因:
端口错误
我将port写成了15672,rabbitmq需要通过端口5672连接,而不是15672

解决方法:
port = 15672
改为 
port = 5672
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

Q: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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/511995?site
推荐阅读
相关标签
  

闽ICP备14008679号