跳转到主要内容

pgmb

一个简单的PostgreSQL消息代理系统

概览

扩展包名版本分类许可证语言
pgmb1.0.0FEATPostgreSQLSQL
ID扩展名BinLibLoadCreateTrustReloc模式
2670pgmb否否否是否否pgmb

Archived upstream. Requires pg_cron and http; preload pg_cron in its configured database. RPM 1.0.0-2PGSTY fixes schema creation and requires pgsql_http; existing DEBs retain the upstream schema-creation failure. Delay arguments do not delay dispatch; retries have no exponential backoff.

版本

类型仓库版本PG 大版本包名依赖
EXTPIGSTY1.0.01817161514pgmbpg_cron, http
RPMPIGSTY1.0.01817161514pgmb_$vpg_cron_$v, pgsql_http_$v
DEBPIGSTY1.0.01817161514postgresql-$v-pgmbpostgresql-$v-cron, postgresql-$v-http
OS / PGPG18PG17PG16PG15PG14
el8.x86_64
el8.aarch64
el9.x86_64
el9.aarch64
el10.x86_64
el10.aarch64
d12.x86_64
d12.aarch64
d13.x86_64
d13.aarch64
PIGSTY 1.0.0
PIGSTY 1.0.0
PIGSTY 1.0.0
PIGSTY 1.0.0
PIGSTY 1.0.0
u22.x86_64
u22.aarch64
PIGSTY 1.0.0
PIGSTY 1.0.0
PIGSTY 1.0.0
PIGSTY 1.0.0
PIGSTY 1.0.0
u24.x86_64
u24.aarch64
PIGSTY 1.0.0
PIGSTY 1.0.0
PIGSTY 1.0.0
PIGSTY 1.0.0
PIGSTY 1.0.0
u26.x86_64
u26.aarch64

构建

您可以使用 pig build 命令构建 pgmb 扩展的 RPM / DEB 包:

pig build pkg pgmb         # 构建 RPM / DEB 包

安装

您可以直接安装 pgmb 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:

pig repo add pgsql -u          # 添加仓库并更新缓存

使用 pig 或者是 apt/yum/dnf 安装扩展:

安装
pig install pgmb;          # 当前活跃 PG 版本安装
pig
pig ext install -y pgmb -v 18  # PG 18
pig ext install -y pgmb -v 17  # PG 17
pig ext install -y pgmb -v 16  # PG 16
pig ext install -y pgmb -v 15  # PG 15
pig ext install -y pgmb -v 14  # PG 14
dnf
dnf install -y pgmb_18       # PG 18
dnf install -y pgmb_17       # PG 17
dnf install -y pgmb_16       # PG 16
dnf install -y pgmb_15       # PG 15
dnf install -y pgmb_14       # PG 14
apt
apt install -y postgresql-18-pgmb   # PG 18
apt install -y postgresql-17-pgmb   # PG 17
apt install -y postgresql-16-pgmb   # PG 16
apt install -y postgresql-15-pgmb   # PG 15
apt install -y postgresql-14-pgmb   # PG 14

创建扩展:

CREATE EXTENSION pgmb CASCADE;  -- 依赖: pg_cron, http

用法

来源:

pgmb 是一个 SQL 消息代理,提供工作端点、路由键模式、队列,以及通过 pg_cron 调度的 HTTP 投递。上游仓库已归档。

安装与兼容性

RPM 修订版 1.0.0-2PGSTY 将 pgsql_http_N 声明为必需依赖,并移除了重复创建 schema 的语句。较早的 RPM 与现有 DEB 包仍使用上游 SQL,control 文件与安装脚本都会创建 schema,因而可能在 CREATE EXTENSION pgmb 时失败。软件包安装成功不代表扩展创建成功。

使用超级用户安装。必需扩展为 pg_cron 和 http;pgmb 本身不需要预加载。将调度器配置为扩展所在数据库:

shared_preload_libraries = 'pg_cron'
cron.database_name = 'postgres'

重启 PostgreSQL,连接该数据库,先创建依赖,再创建扩展:

CREATE EXTENSION pg_cron;
CREATE EXTENSION http;
CREATE EXTENSION pgmb;

注册队列并发送消息

工作端点接收来自数据库服务器的 HTTP 请求。使用可信端点,并限制可注册工作端点的角色。

SELECT pgmb.create(
    'orders', 'order.*', 3,
    pgmb.worker('order_worker', 'http://127.0.0.1:8080/worker', 100)
);

SELECT pgmb.send(
    gen_random_uuid(), 'order.created', '{"order_id": 123}'::jsonb
);

SELECT * FROM pgmb.workers;
SELECT * FROM pgmb.queues;
SELECT * FROM pgmb.orders_queue;
SELECT * FROM pgmb.orders_dead_letter_queue;

pgmb.create 的参数顺序是名称、绑定模式、最大重试次数、工作端点 UUID。触发器将消息路由到匹配的队列,创建队列时会注册调度任务。

API

函数用途
pgmb.worker(name, endpoint, rps)注册工作端点并返回 UUID;rps 限制每次投递的批量大小。
pgmb.create(name, binding_key, max_retries, worker_id)创建队列、死信表和调度任务,返回队列 UUID。
pgmb.send(id, routing_key, body)保存 JSONB 消息,并路由到匹配的队列。
pgmb.send 重载接受可选的消息头,以及整数秒数或时间戳形式的延迟。
pgmb.dispatch_messages(queue_id)批量投递;成功的 HTTP 响应标记为已确认,失败则重试,达到限制后移入死信表。

1.0.0 版本限制

  • 延迟参数会填写 enqueued_at,但投递函数不排除未来时间戳,因此这些重载不能保证延迟投递。
  • 消息头会随消息保存,但投递函数仅通过 http_post 发送消息体,不会转发为自定义 HTTP 请求头。
  • 重试在后续投递时使用计数器;SQL 没有实现指数退避。
  • HTTP 操作的副作用不受数据库事务控制。使用这个已归档项目之前,应核对投递与数据保留需求。

这个页面对您有帮助吗?