RabbitMQ通信模式(Simplest)Python示例

RabbitMQ通信模式-Python示例

0.RabbitMQ官网通信模式

1.Simplest(简单)模式

1.1 发送端

python 复制代码
# -*- coding: utf-8 -*-
"""
Author: xxx
date:   2025/5/19 11:30
Description:    
    Simaple简单模式,生产者
    简单的RabbitMQ消息队列(不安全,不能持久化)
"""

import pika

# RabbitMQ 服务器地址
rabbitmq_host = '192.168.120.19'
# RabbitMQ 服务器端口
rabbitmq_port = 5672
# RabbitMQ 用户名
rabbitmq_username = 'rabbitmq'
# RabbitMQ 密码
rabbitmq_password = 'rabbitmq@123'

# 根据用户名和密码,创建凭证对象
credentials = pika.PlainCredentials(rabbitmq_username, rabbitmq_password)
# 创建连接参数对象,指定主机、端口、凭证等信息
connection = pika.BlockingConnection(
    pika.ConnectionParameters(
        host=rabbitmq_host,
        port=rabbitmq_port,
        credentials=credentials
    )
)
# 创建通道对象
channel = connection.channel()

# 定义消息队列名称
queue_name = 'hello'
# 声明消息队列,如果没有队列会自动创建
channel.queue_declare(
    queue=queue_name
)

# 定义消息内容
message = 'Hello, World!'
# 发布消息到消息队列,routing_key为队列名称,body为消息内容,properties为属性,其中delivery_mode为2表示持久化
channel.basic_publish(
    exchange='',
    routing_key=queue_name,
    body=message
)
print(" [x] Sent '{}'".format(message))

# 关闭通道和连接
connection.close()

1.2 接收端

python 复制代码
# -*- coding: utf-8 -*-
"""
Author: tanggaomeng
date:   2025/5/19 11:44
Description:    
    Simaple简单模式,消费者
    简单的RabbitMQ消息队列(不安全,不能持久化)
"""

import pika

# RabbitMQ 服务器地址
rabbitmq_host = '192.168.120.19'
# RabbitMQ 服务器端口
rabbitmq_port = 5672
# RabbitMQ 用户名
rabbitmq_username = 'rabbitmq'
# RabbitMQ 密码
rabbitmq_password = 'rabbitmq@123'

# 根据用户名和密码,创建凭证对象
credentials = pika.PlainCredentials(rabbitmq_username, rabbitmq_password)
# 创建连接参数对象,指定主机、端口、凭证等信息
connection = pika.BlockingConnection(
    pika.ConnectionParameters(
        host=rabbitmq_host,
        port=rabbitmq_port,
        credentials=credentials
    )
)
# 创建通道对象
channel = connection.channel()

# 定义消息队列名称
queue_name = 'hello'
# 声明消息队列,如果没有队列会自动创建
channel.queue_declare(
    queue=queue_name
)

# 将ReceivedMessage添加到队列中,同时替换通道实现。
# 返回的结果,会返回到这里面,如果有兴趣可以点开basic_consume方法去看看源代码
# 订阅消息队列,设置自动应答(auto_ack=False),并指定回调函数
def callback(ch, method, properties, body):
    print(" [x] Received %r" % (body,))


# 从服务器队列中消费
# no_ack=True ,是需要是否确定消息的处理了,告诉服务端
# no_ack=False ,默认是False,可以不写
channel.basic_consume(queue=queue_name, on_message_callback=callback, auto_ack=False)

print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()

'''
注意:接收到处于死循环,一直在等待接收,发送一个数据,就收到一个数据
'''
python 复制代码
基于上面的代码不做任何修改
把上面的消费者开N个就是想要的结果。
如下:
运行3个消费者,生产者生成的消息队列依次被接收者接收,每次只有一个消费者接收到信息,3个消费者接收顺序依次进行

参考:
https://www.rabbitmq.com/tutorials

相关推荐
人工智能训练11 小时前
【极速部署】Ubuntu24.04+CUDA13.0 玩转 VLLM 0.15.0:预编译 Wheel 包 GPU 版安装全攻略
运维·前端·人工智能·python·ai编程·cuda·vllm
yaoming16811 小时前
python性能优化方案研究
python·性能优化
码云数智-大飞12 小时前
使用 Python 高效提取 PDF 中的表格数据并导出为 TXT 或 Excel
python
biuyyyxxx13 小时前
Python自动化办公学习笔记(一) 工具安装&教程
笔记·python·学习·自动化
极客数模13 小时前
【2026美赛赛题初步翻译F题】2026_ICM_Problem_F
大数据·c语言·python·数学建模·matlab
小鸡吃米…15 小时前
机器学习中的代价函数
人工智能·python·机器学习
Li emily16 小时前
如何通过外汇API平台快速实现实时数据接入?
开发语言·python·api·fastapi·美股
m0_5613596716 小时前
掌握Python魔法方法(Magic Methods)
jvm·数据库·python
Ulyanov16 小时前
顶层设计——单脉冲雷达仿真器的灵魂蓝图
python·算法·pyside·仿真系统·单脉冲
2401_8384725117 小时前
使用Python进行图像识别:CNN卷积神经网络实战
jvm·数据库·python