Python如何操作RabbitMQ实现fanout发布订阅模式?有录播直播私教课视频教程

fanout发布订阅模式

基本用法

生产者

python 复制代码
import json
import rabbitmq

# 建立连接
credentials = rabbitmq.PlainCredentials(
    'zhangdapeng',
    'zhangdapeng520',
)  # mq用户名和密码
connection_target = rabbitmq.ConnectionParameters(
    host='127.0.0.1',
    port=5672,
    virtual_host='/',
    credentials=credentials,
)
connection = rabbitmq.BlockingConnection(connection_target)

# 队列信息
exchange_name = "user_manager_fanout"
queue_name = "user_manager_fanout"

# 创建管道
channel = connection.channel()

# 声明一个交换机
channel.exchange_declare(exchange=exchange_name, exchange_type=rabbitmq.ExchangeType.fanout)

# 向队列中写入数据
user = {"id": 1, "name": "张三", "age": 23}
message = json.dumps(user, ensure_ascii=True)
channel.basic_publish(
    exchange=exchange_name,
    routing_key=queue_name,  # 队列名
    body=message.encode('utf8'),
    properties=rabbitmq.BasicProperties(delivery_mode=2),  # 声明消息在队列中持久化
)
print(message)

# 关闭连接
connection.close()

消费者

python 复制代码
import rabbitmq
import json

# 创建连接
credentials = rabbitmq.PlainCredentials(
    'zhangdapeng',
    'zhangdapeng520',
)
target = rabbitmq.ConnectionParameters(
    host='127.0.0.1',
    port=5672,
    virtual_host='/',
    credentials=credentials,
)
connection = rabbitmq.BlockingConnection(target)

# 创建管道
channel = connection.channel()

# 队列信息
exchange_name = "user_manager_fanout"
queue_name = "user_manager_fanout"

# 绑定交换机
channel.exchange_declare(
    exchange=exchange_name,
    exchange_type=rabbitmq.ExchangeType.fanout,
)

# 绑定队列
result = channel.queue_declare(
    queue=queue_name,
    exclusive=True,
)
channel.queue_bind(
    exchange=exchange_name,
    queue=queue_name,
)


def callback(ch, method, properties, body):
    """每次接收到消息的消费回调方法"""
    ch.basic_ack(delivery_tag=method.delivery_tag)
    data = body.decode("utf8")
    print(json.loads(data))


# 开始消费
channel.basic_consume(
    queue=queue_name,
    on_message_callback=callback,
    auto_ack=False,
)
try:
    channel.start_consuming()
finally:
    connection.close()

简化代码

生产者

python 复制代码
import rabbitmq

# 建立连接
connection = rabbitmq.get_connection()

# 队列信息
exchange_name = "user_manager_fanout"
queue_name = "user_manager_fanout"

# 创建管道
channel = connection.channel()

# 声明一个交换机
channel.exchange_declare(exchange=exchange_name, exchange_type=rabbitmq.ExchangeType.fanout)

# 向队列中写入数据
user = {"id": 1, "name": "张三", "age": 23}
rabbitmq.send_json(channel, user, exchange_name, queue_name)

# 关闭连接
connection.close()

消费者

python 复制代码
import rabbitmq
import json

# 创建连接
connection = rabbitmq.get_connection()

# 创建管道
channel = connection.channel()

# 队列信息
exchange_name = "user_manager_fanout"
queue_name = "user_manager_fanout"

# 绑定交换机
channel.exchange_declare(
    exchange=exchange_name,
    exchange_type=rabbitmq.ExchangeType.fanout,
)

# 绑定队列
result = channel.queue_declare(
    queue=queue_name,
    exclusive=True,
)
channel.queue_bind(
    exchange=exchange_name,
    queue=queue_name,
)


def callback(ch, method, properties, body):
    """每次接收到消息的消费回调方法"""
    print(rabbitmq.receive_json(ch, method, body))


# 开始消费
rabbitmq.consume(connection, queue_name, callback)

进一步简化代码

生产者

python 复制代码
import rabbitmq

# 建立连接
connection = rabbitmq.get_connection()

# 队列信息
exchange_name = "user_manager_fanout"
queue_name = "user_manager_fanout"

# 创建管道
channel = rabbitmq.get_fanout_channel(connection, exchange_name)

# 向队列中写入数据
user = {"id": 1, "name": "张三", "age": 23}
rabbitmq.send_json(channel, user, exchange_name, queue_name)

# 关闭连接
connection.close()

消费者

python 复制代码
import rabbitmq

# 创建连接
connection = rabbitmq.get_connection()

# 队列信息
exchange_name = "user_manager_fanout"
queue_name = "user_manager_fanout"

# 创建管道
channel = rabbitmq.get_fanout_channel(connection, exchange_name, queue_name)


def callback(ch, method, properties, body):
    """每次接收到消息的消费回调方法"""
    print(rabbitmq.receive_json(ch, method, body))


# 开始消费
rabbitmq.consume(connection, queue_name, callback)
相关推荐
孟健7 分钟前
从单体失控到解耦管道:用 Unix 哲学重构 Anthropic 式多 Agent 动态工作流
人工智能·python·架构
小白快快跑哦15 分钟前
python-字符串全解(六):正则表达式-前后相断言
开发语言·python·正则表达式·前后相断言
kimnoic20 分钟前
Python数据分析中正则表达式匹配字符串与常用函数示例详解
开发语言·python
许墨の小蝴蝶31 分钟前
Pillow 替换图片文字后字号偏小的排查
python·pillow
朝朝辞暮i39 分钟前
第 01 讲:Python 变量、对象、数据类型与内存引用
开发语言·python
外收内放1 小时前
Python基础语法练习题(69)
开发语言·python
TomEval1 小时前
【测AI】第11篇:深度学习基础 —— 神经网络是怎么工作的
人工智能·python·深度学习·神经网络·机器学习·aigc
zhang-ge1 小时前
python包和项目管理器uv在ubuntu下的安装与使用
开发语言·python·uv
for_ever_love__1 小时前
LangChain 降级、重试与超时:让服务在模型抽风时还能用
python·自然语言处理·langchain·agent·超时·重试·with_retry
MoRanzhi12032 小时前
第 8 篇 · 机器学习建模与实验评估:建模流程与对照实验
python·机器学习·scikit-learn·模型评估·交叉验证·shap·消融实验