| 一、rabbitmq简介、安装 |
简介:
MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。
RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现的产品,遵循Mozilla Public License开源协议,RabbitMQ是一个消息代理,从“生产者”接收消息并传递消息至“消费者”,期间可根据规则路由、缓存、持久化消息。“生产者”也即message发送者以下简称P,相对应的“消费者”乃message接收者以下简称C,message通过queue由P到C,queue存在于RabbitMQ,可存储尽可能多的message,多个P可向同一queue发送message,多个C可从同一个queue接收messag。
安装(linux)
1、安装erlang
以root身份执行下面命令
yum install erlang xmlto
2、安装epel源
rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
wget -O /etc/yum.repos.d/epel-erlang.repo http://repos.fedorapeople.org/repos/peter/erlang/epel-erlang.repo
3、安装rabbitmq rpm包
wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.1.5/rabbitmq-server-3.1.5-1.noarch.rpm
rpm -ivh rabbitmq-server-3.1.5-1.noarch.rpm
4、启动rabbitmq,并验证启动情况
rabbitmq-server --detached &ps aux |grep rabbitmq
5、以服务的方式启动
service rabbitmq-server start
6、检查端口5672是否打开
/sbin/iptables -I INPUT -p tcp --dport 5672 -j ACCEPT
/etc/rc.d/init.d/iptables save
/etc/init.d/iptables restart
/etc/init.d/iptables status
7、启用维护插件
rabbitmq-plugins enable rabbitmq_management
8、重启rabbitmq
service rabbitmq-server restart
9、登录
http://192.168.110.60:15672/ 用户名密码 guest
无法登陆解决办法
vim /etc/rabbitmq/rabbitmq.config
写入信息,并保存
[{rabbit, [{loopback_users, []}]}].
其他相关:
1、服务器启动与关闭
启动:service rabbitmq-server start
关闭:service rabbitmq-server stop
重启:service rabbitmq-server restart
2、用户管理
新增 rabbitmqctl add_user admin admin
删除 rabbitmqctl delete_user admin
修改 rabbitmqctl change_password admin admin123
用户列表 rabbitmqctl list_users
设置角色 rabbitmqctl set_user_tags admin administrator monitoring policymaker management
设置用户权限 rabbitmqctl set_permissions -p VHostPath admin ConfP WriteP ReadP
查询所有权限 rabbitmqctl list_permissions [-p VHostPath]
指定用户权限 rabbitmqctl list_user_permissions admin
清除用户权限 rabbitmqctl clear_permissions [-p VHostPath] admin
tips:
设置远程用户密码
创建一个admin用户:rabbitmqctl add_user admin 1234qwer
设置该用户为administrator角色:rabbitmqctl set_user_tags admin administrator
设置权限:rabbitmqctl set_permissions -p '/' admin '.' '.' '.'
重启rabbitmq服务: service rabbitmq-server restart
| 二、rabbitmq python API |
详细的api请查看rabbitmq官网:http://www.rabbitmq.com/devtools.html
安装:pip install pika
1.简单的消费者生产者模型
生产者:
#!/usr/bin/env python3 #_*_ coding:utf-8 _*_ #Author:wd import pika connection = pika.BlockingConnection(pika.ConnectionParameters( host='10.0.0.241',port=5672)) #创建连接 channel = connection.channel()#建立管道 channel.queue_declare(queue='hello')#声明queue # n RabbitMQ a message can never be sent directly to the queue, it always needs to go through an exchange. channel.basic_publish(exchange='', routing_key='hello', body='Hello World!') print(" Sent 'Hello World!'") connection.close()
消费者:
#!/usr/bin/env python3 #_*_ coding:utf-8 _*_ #Author:wd import pika connection = pika.BlockingConnection(pika.ConnectionParameters( host='10.0.0.241',port=5672))#建立连接 channel = connection.channel()#建立管道 channel.queue_declare(queue='hello')#声明从那个管道接受消息 def callback(ch, method, properties, body):#回调函数,收到消息后执行的函数,body指消息主题 print(" [x] Received %r" % body) channel.basic_consume(callback, queue='hello', no_ack=True) #如果设置no_ack=Flase,会把消费的消息重写添加到队列中 print(' [*] Waiting for messages.') channel.start_consuming()#阻塞模式