一.简单的Rabbitmq队列通信
由上图可知,数据是先发给exchange交换器,exchage再发给相应队列。pika模块是python对rabbitMQ的API接口。接收端有一个回调函数,一接收到数据就调用该函数。一条消息被一个消费者接收后,该消息就从队列删除。
二.
1.Ubuntu安装rabbitmq-server
由于rabbitMq需要erlang语言的支持,在安装rabbitMq之前需要安装erlang,执行命令:
1 sudo apt-get install erlang-nox
安装RabbitMQ服务软件包:
1 sudo apt-get install rabbitmq-server
启动、停止、重启、状态rabbitMq命令:
1 启动:sudo rabbitmq-server start 2 关闭: sudo rabbitmq-server stop 3 重启: sudo rabbitmq-server restart 4 查看状态:sudo rabbitmqctl status
安装RabbitMQ监控管理插件进行RabbitMQ的管理
1 rabbitmq-plugins enable rabbitmq_management #插件rabbitmq_management启动成功后就可以通过web页面进行RabbitMQ的监控和管理
使用rabbitmq_management插件进行监控和管理
使用firefox浏览器登录:http://localhost:15672
在登录页面使用 guest/guest用户名和密码登录RabbitMQ管理系统,在系统中可以对RabbitMQ服务进行channel,queue,用户等的管理
2.rabbitmq 用户管理相关指令:
1 # 新增一个用户 2 rabbitmqctl add_user Username Password 3 4 # 删除一个用户 5 rabbitmqctl delete_user Username 6 7 # 修改用户的密码 8 rabbitmqctl change_password Username Newpassword 9 10 # 查看当前用户列表 11 rabbitmqctl list_users
3.用户权限:
用户权限指的是用户对exchange,queue的操作权限,包括配置权限,读写权限。配置权限会影响到exchange,queue的声明和删除。读写权限影响到从queue里取消息,向exchange发送消息以及queue和exchange的绑定(bind)操作。
例如: 将queue绑定到某exchange上,需要具有queue的可写权限,以及exchange的可读权限;向exchange发送消息需要具有exchange的可写权限;从queue里取数据需要具有queue的可读权限。详细请参考官方文档中"How permissions work"部分。
相关命令为:
1 # 设置用户权限 2 rabbitmqctl set_permissions -p VHostPath User ConfP WriteP ReadP 3 4 # 查看(指定hostpath)所有用户的权限信息 5 rabbitmqctl list_permissions [-p VHostPath] 6 7 # 查看指定用户的权限信息 8 rabbitmqctl list_user_permissions User 9 10 # 清除用户的权限信息 11 rabbitmqctl clear_permissions [-p VHostPath] User
4.用户角色:
按照个人理解,用户角色可分为五类,超级管理员, 监控者, 策略制定者, 普通管理者以及其他。
(1) 超级管理员(administrator)
可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。
(2) 监控者(monitoring)
可登陆管理控制台(启用management plugin的情况下),同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)
(3) 策略制定者(policymaker)
可登陆管理控制台(启用management plugin的情况下), 同时可以对policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)。
(4) 普通管理者(management)
仅可登陆管理控制台(启用management plugin的情况下),无法看到节点信息,也无法对策略进行管理。
(5) 其他
无法登陆管理控制台,通常就是普通的生产者和消费者。
设置用户角色命令:
1 rabbitmqctl set_user_tags User Tag 2 3 # User为用户名, Tag为角色名(对应于上面的administrator,monitoring,policymaker,management,或其他自定义名称)。 4 5 #也可以给同一用户设置多个角色,例如: 6 7 rabbitmqctl set_user_tags hncscwc monitoring policymaker
rabbitmq-用户管理,详情查看:http://www.cnblogs.com/AloneSword/p/4200051.html
4.Windows环境下安装rabbitmq:
windows下安装教程:https://jingyan.baidu.com/article/a17d5285173ce68098c8f2e5.html
安装pika模块:
python中使用rabbitmq服务,可以使用现成的类库pika、txAMQP或者py-amqplib,这里用pika
在命令行中直接使用pip安装命令:
1 pip install pika
三.RabbitMQ队列基本使用步骤(python Django环境下):
消息生产者、rabbitmq中间件、消息消费者
1.用python语言新建并编写好send.py(消息生产者)、receive.py(消息消费者)文件
2.远程访问rabbitmq-server端(开启rabbitmq服务端):
1)需在rabbitmq-server端创建一个用户:sudo rabbitmqctl add_user nan nan123
2)设置该用户角色类型:rabbitmqctl set_user_tags nan administrator
3)设置权限:rabbitmqctl set_permissions -p '/' nan '.' '.' '.'
4)重启rabbitmq服务:sudo service rabbitmq-server restart
3.执行python中send.py、receive.py文件,测试结果
send.py:
1 #!/usr/bin/env python 2 import pika 3 4 credentials = pika.PlainCredentials("nan","nan123456") #文本格式验证 5 connection = pika.BlockingConnection(pika.ConnectionParameters( 6 '192.168.1.145',credentials=credentials)) 7 channel = connection.channel() # 生成管道,在管道内跑队列 8 9 # 声明queue 10 channel.queue_declare(queue='hello') 11 12 # n RabbitMQ a message can never be sent directly to the queue, it always needs to go through an exchange. 13 channel.basic_publish(exchange='',# 先把数据发给exchange交换机,再由交换机转发给对应的队列 14 routing_key='hello', # 向'hello'队列发数据 15 body='Hello World!' # 数据 16 ) 17 print(" [x] Sent 'Hello World!'") 18 connection.close() #关闭管道