--------------------------------------------------------
-安装
--------------------------------------------------------
安装Rabbitmq
1.使用docker查询rabbitmq的镜像
docker search rabbitmq
2.安装镜像
安装name为rabbitmq的这里是直接安装最新的,如果需要安装其他版本在rabbitmq后面跟上版本号即可
docker pull rabbitmq
3.运行mq:
需要注意的是-p 5673:5672 解释:-p 外网端口(主机的端口):docker的内部端口 ,你们可以改成自己的外网端口号,我这里映射的外网端口是5673那么程序连接端口就是用5673
docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5673:5672 rabbitmq
docker start rabbit
docker exec -it rabbit rabbitmq-plugins enable rabbitmq_management
访问http://IP:15672,访问web界面,这里的用户名和密码默认都是guest
--------------------------------------------------------
-用户管理
--------------------------------------------------------
-----添加一个新的用户
创建账号
rabbitmqctl add_user admin 123
-----设置用户角色
rabbitmqctl set_user_tags admin administrator
-----设置用户权限
set_permissions [-p <vhostpath>] <user> <conf> <write> <read>
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
用户 user_admin 具有/vhost1 这个 virtual host 中所有资源的配置、写、读权限
-----当前用户和角色
rabbitmqctl list_users
# coding=utf-8
### 生产者
import json
import pika
import datetime
import time
credentials = pika.PlainCredentials('guest', 'guest') # mq用户名和密码
# 虚拟队列需要指定参数 virtual_host,如果是默认的可以不填。
connection = pika.BlockingConnection(pika.ConnectionParameters(host = '123.60.216.176',port = 5673,virtual_host = '/',credentials = credentials))
channel=connection.channel()
# 声明消息队列,消息将在这个队列传递,如不存在,则创建
result = channel.queue_declare(queue = 'python-test')
for i in range(3):
time.sleep(3)
current_time = datetime.datetime.now()
message=json.dumps({'xiny':str(current_time)})
# 向队列插入数值 routing_key是队列名
channel.basic_publish(exchange = '',routing_key = 'python-test',body = message)
print(message)
connection.close()
# coding=utf-8
### 消费者
import pika
user_info = pika.PlainCredentials('admin', '123')
connection = pika.BlockingConnection(pika.ConnectionParameters('123.60.216.176', 5673, '/', user_info))
channel = connection.channel()
# 如果指定的queue不存在,则会创建一个queue,如果已经存在 则不会做其他动作,生产者和消费者都做这一步的好处是
# 这样生产者和消费者就没有必要的先后启动顺序了
channel.queue_declare(queue='python-test')
# 回调函数
def callback(ch, method, properties, body):
print('消费者收到:{}'.format(body))
# channel: 包含channel的一切属性和方法
# method: 包含 consumer_tag, delivery_tag, exchange, redelivered, routing_key
# properties: basic_publish 通过 properties 传入的参数
# body: basic_publish发送的消息
channel.basic_consume(queue='python-test', # 接收指定queue的消息
auto_ack=True, # 指定为True,表示消息接收到后自动给消息发送方回复确认,已收到消息
on_message_callback=callback # 设置收到消息的回调函数
)
print('Waiting for messages. To exit press CTRL+C')
# 一直处于等待接收消息的状态,如果没收到消息就一直处于阻塞状态,收到消息就调用上面的回调函数
channel.start_consuming()
--------