pgq
通用队列的PG实现
概览
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 2650 | pgq | 否 | 是 | 否 | 是 | 否 | 否 | pg_catalog |
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PGDG | 3.5.1 | 1817161514 | pgq | - |
| RPM | PGDG | 3.5.1 | 1817161514 | pgq_$v | - |
| DEB | PGDG | 3.5.1 | 1817161514 | postgresql-$v-pgq3 | - |
安装
您可以直接安装 pgq 扩展包的预置二进制包,首先确保 PGDG 仓库已经添加并启用:
BASH
使用 pig 或者是 apt/yum/dnf 安装扩展:
安装
BASH
pig
BASH
dnf
BASH
apt
BASH
创建扩展:
SQL
用法
PgQ 是一个 PostgreSQL 扩展,提供通用的高性能无锁队列,带有简单的 SQL 函数 API。它使用生产者-消费者模型,基于批次进行事件处理。
SQL
核心概念
- 队列(Queue):命名的事件流。生产者插入事件,消费者按批次消费。
- 消费者(Consumer):注册到队列上的命名订阅者。每个消费者跟踪自己的位置。
- 批次(Batch):一组一起获取的事件。消费者逐批处理事件。
- 心跳进程(Ticker):后台进程,定期创建批次边界(tick)。
队列管理
SQL
消费者注册
SQL
生产事件
SQL
消费事件
SQL
典型消费者循环
SQL
维护
PgQ 需要在后台运行心跳守护进程(pgqd),用于创建批次边界并执行表轮转和重试事件处理等维护任务。
主要函数
| 函数 | 描述 |
|---|---|
pgq.create_queue(name) | 创建新队列 |
pgq.drop_queue(name) | 删除队列 |
pgq.register_consumer(queue, consumer) | 注册消费者 |
pgq.unregister_consumer(queue, consumer) | 注销消费者 |
pgq.insert_event(queue, type, data, ...) | 插入事件 |
pgq.next_batch(queue, consumer) | 获取下一批次 ID |
pgq.get_batch_events(batch_id) | 从批次获取事件 |
pgq.event_retry(batch_id, event_id, seconds) | 安排事件重试 |
pgq.finish_batch(batch_id) | 标记批次已处理 |
pgq.get_queue_info([name]) | 获取队列统计信息 |
pgq.get_consumer_info(queue) | 获取消费者统计信息 |