当前位置: 首页 > news >正文

RabbitMQ通信模式(Simplest)Python示例

RabbitMQ通信模式-Python示例

  • 0.RabbitMQ官网通信模式
  • 1.Simplest(简单)模式
    • 1.1 发送端
    • 1.2 接收端

0.RabbitMQ官网通信模式

在这里插入图片描述

1.Simplest(简单)模式

1.1 发送端

# -*- 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 接收端

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

在这里插入图片描述

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

相关文章:

  • 百度飞桨OCR(PP-OCRv4_server_det|PP-OCRv4_server_rec_doc)文本识别-Java项目实践
  • Python函数——万字详解
  • 算法题(150):拼数
  • 用Python将 PDF 中的表格提取为 Excel/CSV
  • OpenCV计算机视觉实战(6)——经典计算机视觉算法
  • Python60日基础学习打卡D30
  • LangChain多模态智能体:文生图、识图、RAG问答与小说生成全攻略
  • Apidog MCP服务器,连接API规范和AI编码助手的桥梁
  • Linux环境搭载
  • 使用MCP驱动IDA pro分析样本
  • MongoDB的管道聚合
  • 物联网之使用Vertx实现HTTP/WebSocket最佳实践
  • WordPress搜索引擎优化的最佳重定向插件:入门指南
  • 146. LRU 缓存
  • C++字符串处理:`std::string`和`std::string_view`的区别与使用
  • R 语言科研绘图第 49 期 --- 热力图-相关性
  • Geotools中关于坐标转换纬度超限问题
  • vue2、vue3项目打包生成txt文件-自动记录打包日期:git版本、当前分支、提交人姓名、提交日期、提交描述等信息 和 前端项目的版本号json文件
  • 物联网数据湖架构
  • 【C++】异常解析
  • 新疆巴音郭楞州和硕县发生4.6级地震,震源深度10千米
  • 巴基斯坦外长访华是否与印巴局势有关?外交部:此访体现巴方高度重视中巴关系
  • 内蒙古赤峰市城建集团董事长孙广通拟任旗县区党委书记
  • 上海青少年书法学习园开园:少年以巨笔书写《祖国万岁》
  • “复旦源”一源六馆焕新启幕,设立文化发展基金首期1亿元
  • 2024年全国博物馆接待观众14.9亿人次