# `CMDC.Provider.Registry.Broadcaster.PG`
[🔗](https://github.com/tupleyun/cmdc/blob/v0.5.3/lib/cmdc/provider/registry/broadcaster/pg.ex#L1)

基于 OTP `:pg` 模块的零依赖 best-effort broadcaster — cmdc 默认实现。

> **best-effort 失败语义（评审订正 #2）**：
>
> - `:pg` 是 `send/2`-only 协议，**无重试、无 ack、无递送保证**
> - 网络分区会丢更新；分区恢复后 cmdc 不会自动重放
> - 远端节点崩溃时本节点 `send/2` 静默丢消息
>
> **生产多节点强一致场景**请自实现 `CMDC.Provider.Registry.Broadcaster`
> 接 Phoenix.PubSub / Redis Streams / NATS 等带 ack 的传输层。

## 工作机制

1. `setup/1` 时把 cmdc Registry GenServer pid `:pg.join/2` 进 `:cmdc_provider_registry` group
2. `broadcast/1` 时 `:pg.get_members/2` 取所有节点的 pid（含自身），
   `send/2` 派发 `{:cmdc_registry_remote, event}` 到非本进程的 pid
3. 远端 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

---

*Consult [api-reference.md](api-reference.md) for complete listing*
