基于 OTP :pg 模块的零依赖 best-effort broadcaster — cmdc 默认实现。
best-effort 失败语义(评审订正 #2):
生产多节点强一致场景请自实现
CMDC.Provider.Registry.Broadcaster接 Phoenix.PubSub / Redis Streams / NATS 等带 ack 的传输层。
工作机制
setup/1时把 cmdc Registry GenServer pid:pg.join/2进:cmdc_provider_registrygroupbroadcast/1时:pg.get_members/2取所有节点的 pid(含自身),send/2派发{:cmdc_registry_remote, event}到非本进程的 pid- 远端 cmdc Registry GenServer 的
handle_info({:cmdc_registry_remote, _}, _)接收消息并写本地 ETS(参见CMDC.Provider.Registry)
适用场景
- 单机部署:完全等效 Noop(自身 pid 被过滤掉)
- 同机房 BEAM 集群:无依赖即可用,best-effort 接受
- 不推荐:跨地域 / 网络分区频繁 / 强一致需求
配置
# 默认配置,不需要显式写
config :cmdc, CMDC.Provider.Registry,
broadcaster: CMDC.Provider.Registry.Broadcaster.PG
# 自定义 PG group 名(避免与业务 group 冲突)
config :cmdc, CMDC.Provider.Registry,
broadcaster: CMDC.Provider.Registry.Broadcaster.PG,
broadcaster_group: :my_custom_group