Python+RabbitMQ的一些笔记

本文详细介绍了如何安装和使用RabbitMQ,包括添加用户、设置权限、手动输入设置、扇出和直接交换机类型,以及RPC调用的客户端和服务器实现。提供了Python操作RabbitMQ的实例。
摘要由CSDN通过智能技术生成

--------------------------------------------------------

-安装

--------------------------------------------------------

安装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()

--------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值