- 文档首页
云数据库 PostgreSQL 版
用户指南
插件
原生消息队列(pgmq)
原生消息队列(pgmq)
pgmq 是一款基于 PostgreSQL 实现的轻量级消息队列扩展,其 API 设计与 Amazon SQS 和 RSMQ 类似,为用户提供了简单而强大的消息处理能力。它完全通过 SQL/PLpgSQL 实现,无需任何后台工作进程或外部依赖,极大地简化了部署和维护。
pgmq 采用“队列即表”的架构,将消息以 JSONB 格式存储在普通表中。它支持可见性超时、延迟投递、长轮询、批量操作(发送/归档/删除)以及丰富的监控度量,是构建事件驱动架构、处理后台任务和解耦微服务的理想选择。
- 异步任务处理:将耗时操作(如发送邮件、生成报告、图像处理)放入队列,由后台消费者异步处理,提升系统响应速度。
- 服务解耦:在微服务架构中,通过消息队列传递事件,降低服务间的直接依赖。
- 数据管道:作为轻量级数据管道,用于在不同系统或处理阶段之间可靠地传递数据。
- 延迟任务:利用延迟投递功能,实现定时提醒、定时任务触发等功能。
执行以下 SQL 命令以启用 pgmq 插件。
如果不再需要,可以执行以下命令将其卸载。卸载插件会删除所有相关的队列、消息和函数。
- 创建一个新的消息队列。每个队列在物理上对应一个数据表。
- 删除一个消息队列及其所有关联的数据表(包括主队列和归档队列)。
- queue_name (text): 必需,目标队列的名称。
- msg (jsonb): 必需,要发送的消息体,必须是 JSONB 格式。
- delay (integer): 可选,消息的延迟投递时间(秒)。消息将在指定延迟后才对消费者可见。
- msgs (jsonb[]): 必需,一个 JSONB 数组,包含多条消息。
- 从队列中读取一批消息,但并不立即删除它们。读取后,消息会进入“不可见”状态,直到可见性超时(vt)结束。
- vt (integer): 必需,可见性超时时间(秒)。在此期间,其他消费者无法读取到这些消息。
- qty (integer): 必需,要读取的最大消息数量。
- 如果成功读取,函数将返回一个包含消息详情的集合,包括 msg_id、message 等。如果在指定时间内没有 新消息,长轮询模式下会等待,否则返回空集。
- pop 操作将读取和删除消息合并为原子一步。它会从队列中读取一条消息并立即将其删除。
- 处理完成后,将消息从主队列移动到归档队列中。这对于审计和问题追溯非常有用。归档表以 a_ 为前缀。
- msg_id (bigint)/msg_ids (bigint[]): 必需,要归档的单条或多条消息 ID。
- 归档后,可以查询归档表 pgmq.a_my_queue 来查看历史消息。
pgmq 提供了视图和函数来监控队列的状态。
- pgmq.metrics_all() 视图:提供所有队列的实时度量,如队列名称、消息总数、可见消息数、不可见消息数等。
- pgmq.metrics(queue_name) 函数:获取指定单个队列的详细度量。
最近更新时间:2026.03.31 10:39:12