You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
5.0 KiB
85 lines
5.0 KiB
package comm
|
|
|
|
// NATS 管道统一定义。
|
|
//
|
|
// 跨服务的各类消息管道(subject / 事件结构)集中在此,便于统一管理与后续扩展——
|
|
// 新增管道在本文件追加,避免 subject 魔法字符串散落各处。
|
|
//
|
|
// 两种语义按需选用:
|
|
// - JetStream(持久、可回放、消费者可负载均衡):用于不能丢的数据流,如统计上报。
|
|
// 发布走 natssys.Publish/PublishAsync,订阅走 JetStream 持久消费者。
|
|
// - core NATS pub/sub(至多一次、fanout 到所有订阅者):用于广播类通知,如配置变更。
|
|
// 发布/订阅走 natssys.Conn().Publish / Conn().Subscribe。
|
|
|
|
const (
|
|
// Nats_StatEventSubject 统计上报管道(JetStream):各业务部署 analyze 把埋点事件双写到此,
|
|
// console 消费落 stats_global_day。作为 canonical 名称;yaml(modules.analyze.Subject /
|
|
// modules.console.Stat.Subject) 配置应与之一致。
|
|
Nats_StatEventSubject = "stats.event"
|
|
|
|
// Nats_ConfigChangedSubject 配置变更广播(core NATS pub/sub):console 后台改了「全局共享配置」
|
|
// (全局环境配置/MCP/会议模板) 后向此 subject 广播;各业务服务订阅后重载对应缓存。
|
|
// 广播语义——所有订阅者都收到;漏收由业务侧 10 分钟定时同步兜底。
|
|
Nats_ConfigChangedSubject = "console.config.changed"
|
|
|
|
// Nats_ConfigEventSubjectPrefix 按「单个应用」下发配置事件的 subject 前缀(JetStream)。
|
|
// 实际 subject 以注册项 nats_subject 字段为准,留空时回退到 "<前缀><appId>"。
|
|
Nats_ConfigEventSubjectPrefix = "console.config."
|
|
)
|
|
|
|
// 配置变更类型(ConfigChangedEvent.Kind 取值):业务侧据此重载对应缓存。
|
|
const (
|
|
ConfigKindGlobalConfig = "global_config" // 全局第三方服务配置(user 模块重载)
|
|
ConfigKindMcp = "mcp" // MCP 服务器(user 模块重载)
|
|
ConfigKindTemplate = "template" // 会议公共模板(echomeet 模块重载)
|
|
ConfigKindThirdSvc = "third_svc" // 依赖服务配置(业务侧重载字段缓存)
|
|
ConfigKindCallTranslate = "call_translate" // 通话翻译配置(translate 模块重载)
|
|
ConfigKindServiceConfig = "service_config" // 应用×服务基础设施/运行配置(后台改后广播;DSN 等多需重启才生效)
|
|
ConfigKindAgent = "agent" // yunyan 自管 Agent 配置(后台改后广播;下发客户端)
|
|
ConfigKindModuleConfig = "module_config" // 应用业务功能配置(登录/短信/邮件/支付;存业务库,后台改后广播、业务侧重载)
|
|
ConfigKindEchomeetOrch = "echomeet_orch" // 会议记录服务编排(引用 svc_config 的服务,按 app_name+region 分层;存 console 库,下发/运行时接入后用)
|
|
ConfigKindChannelApp = "channel_app" // 渠道分发配置(版本/强更/下载地址/支付渠道开关;存 console 库,user 模块下发客户端)
|
|
)
|
|
|
|
// ConfigChangedEvent console→业务 的「配置已变更」广播事件。
|
|
// 业务服务订阅 Nats_ConfigChangedSubject,收到后按 Kind 重载对应缓存。
|
|
type ConfigChangedEvent struct {
|
|
Kind string `json:"kind"` // 变更的配置类型,见 ConfigKind*
|
|
Action string `json:"action"` // add / update / delete
|
|
Region int32 `json:"region"` // 关联区域(global_config/mcp 带;template 为 0)
|
|
Ts int64 `json:"ts"` // 发出时间戳(秒)
|
|
}
|
|
|
|
// 配置热重载的单模块结果状态(ModuleApplyResult.Status 取值)。
|
|
// 三态必须如实回传:把「需要重启」谎报成「已生效」比不回应答更糟。
|
|
const (
|
|
ApplyStatusApplied = "applied" // 已热更生效
|
|
ApplyStatusRestartRequired = "restart_required" // 已收到,但该配置须重启才生效(未注册热重载函数)
|
|
ApplyStatusFailed = "failed" // 重载失败,已保留旧配置继续服务
|
|
)
|
|
|
|
// ModuleApplyResult 单个业务模块的重载结果。
|
|
type ModuleApplyResult struct {
|
|
Module string `json:"module"` // 模块键,见 ModuleCatalog(email/sms/wechatpay…)
|
|
Status string `json:"status"` // ApplyStatus*
|
|
Err string `json:"err,omitempty"`
|
|
}
|
|
|
|
// ConfigApplyReport 业务侧 api 服务对 console 的应答:本部署内**各业务服务**的重载结果汇总。
|
|
// console 据此告诉用户「N/M 个服务已生效、哪个失败了」。
|
|
type ConfigApplyReport struct {
|
|
AppName string `json:"app_name"`
|
|
Kind string `json:"kind"`
|
|
Acks []ConfigApplyAck `json:"acks"` // 本部署内各业务服务各一条
|
|
Ts int64 `json:"ts"`
|
|
}
|
|
|
|
// ConfigApplyAck 单个业务服务的重载回执。
|
|
type ConfigApplyAck struct {
|
|
AppName string `json:"app_name"`
|
|
Region int32 `json:"region"`
|
|
Instance string `json:"instance"` // <服务名>@<主机名>,便于定位是哪个实例失败
|
|
Kind string `json:"kind"`
|
|
Results []ModuleApplyResult `json:"results"`
|
|
Ts int64 `json:"ts"`
|
|
}
|
|
|