尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Olares 中使用 NATS CLI 订阅与发布消息:主题命名规则与权限模型详解
云原生后端运维【免费下载链接】TerminusOpen-Source Personal Cloud OS for Always-On Agents项目地址https://gitcode.com/gh_mirrors/terminus2/Terminus点击查看免费下载Olares 是一个面向常驻 AgentAlways-On Agents的开源个人云操作系统其内部组件与第三方应用通过 NATS 消息总线进行异步通信。本文以 Olares 官方文档《使用 NATS 订阅与发布消息》为骨架完整讲解如何从控制面板获取 NATS 连接信息、如何在集群内用nats-boxCLI 验证消息订阅与发布并结合仓库源码深入剖析 Olares 的 NATS 主题三级命名结构prefix.event.olaresId与按应用类型划分的读写权限模型。读完本文你将能独立完成获取凭证 → 部署工具 → 订阅 → 发布 → 排查权限的完整闭环并理解 Olares 内部事件应用状态、用户变更、资源告警如何借助该模型在各服务间流转。获取连接信息从控制面板读取 NATS 凭证在建立任何 NATS 连接之前需要先从 Olares 控制面板Control Hub获取目标集群的 NATS 连接信息。操作步骤如下从启动台Launcher打开控制面板。在左侧导航栏中找到中间件分类选择Nats。记录主题面板中的以下三项信息主题Subject目标消息主题用户User连接用户名密码Password连接密码。上图即 Olares 控制面板中 Nats 中间件的详情页面。可以看到顶部基础信息模块展示该 NATS 实例的运行参数集群为default、主机为nats os-platform:4222、命名空间为os-platform、用户为admin密码以圆点掩码显示下方的主题表格则按应用列出绑定关系与各自独立的连接账号例如notifications-nats用户notification-server绑定os.notification.*主题、app-service-nats用户os-app-service绑定os.application.*主题、chartrepo-nats用户os-chartrepo绑定os.users.*主题、files-server-nat用户os-files-server绑定os.files.*主题。这恰好印证了本文后续将介绍的主题命名规则系统服务的prefix固定为os且每个应用都拥有独立的读写账号。说明图片路径对应仓库文件 docs/public/images/zh/manual/developer/mw-nats-details.png读者可在仓库中直接查看原图。从仓库源码看NATS 服务以中间件实例的形式运行在os-platform命名空间中监听默认的4222端口。CLI 侧提供了统一的中间件清单命令来核对 NATS 实例的存在与地址olares-cli cluster middleware list --type nats该命令由 cli/cmd/ctl/cluster/middleware/list.go 实现内部调用/middleware/v1/list接口支持以-o json输出结构化结果默认表格模式只输出TYPE、NAME、NAMESPACE、NODES、ADMIN-USER五列密码一律不打印即使使用-o json密码也会被替换为redacted只有显式传入--show-passwords才会输出明文。因此若需要程序化获取 NATS 的连接参数该命令是一个比控制面板更可脚本化的替代途径。通过 CLI 访问部署 nats-box 并在集群内测试nats-box是 NATS 官方提供的全功能客户端容器镜像内置nats、natscli等命令行工具。Olares 将其作为在集群内测试 NATS 订阅与发布的便捷方式——因为它运行在集群内部可以直接解析 NATS 服务的集群内地址无需暴露端口或配置复杂的网络转发。部署 nats-box下载示例文件nats-box.yamlOlares 官方提供并将其上传到 Olares 机器上。进入 YAML 文件所在目录部署nats-boxkubectl apply -f nats-box.yaml获取nats-box的容器名称kubectl get pods -n os-platform | grep nats-box进入nats-box容器kubectl exec -it -n os-platform nats-box-pod -- sh前提条件以上步骤要求当前环境已配置好对 Olares 集群的kubectl访问权限即本地kubeconfig指向 Olares 集群。部署对象被创建在os-platform命名空间这与 NATS 中间件实例所在的命名空间一致。订阅消息使用控制面板中获取的信息主题、用户名、密码执行订阅nats sub subject-from-controlhub --useruser-from-controlhub --passwordpassword-from-controlhub --all参数说明| 参数 | 含义 | |--|--| |subject-from-controlhub| 目标主题来自控制面板主题表格 | |--user| 连接用户名来自控制面板 | |--password| 连接密码来自控制面板 | |--all| 订阅全部相关消息包含 JetStream 流消息而非仅普通 NATS 消息 |订阅成功后nats-box会保持前台监听任何发布到该主题或与通配符匹配的主题的消息都会实时打印到终端。发布消息在另一个终端或另一个会话向指定主题发布一条 JSON 消息nats pub subject-from-controlhub {hello:world} --useruser-from-controlhub --passwordpassword-from-controlhub发布端与订阅端使用相同的一组--user/--password凭证即可在同一主题上进行收发验证。若订阅端终端同步打印出{hello:world}说明该账号在该主题上同时具备发布与订阅权限整条链路验证通过。连接地址与源码中的连接配置在上述命令中无需指定服务器地址这是因为nats-box容器默认内置了对集群内 NATS 服务地址的解析示例 YAML 中通常配置了NATS_HOST/NATS_PORT等环境变量或默认地址。作为对照仓库中 Olares 自身服务如app-service连接 NATS 的方式可以看 framework/app-service/pkg/utils/nats.gofunc NewNatsConn() (*nats.Conn, error) { natsHost : os.Getenv(NATS_HOST) natsPort : os.Getenv(NATS_PORT) username : os.Getenv(NATS_USERNAME) password : os.Getenv(NATS_PASSWORD) natsURL : fmt.Sprintf(nats://%s:%s, natsHost, natsPort) opts : []nats.Option{ nats.UserInfo(username, password), nats.MaxReconnects(-1), nats.ReconnectWait(2 * time.Second), // ... 断线告警、重连、永久关闭等回调处理器 } nc, err : nats.Connect(natsURL, opts...) // ... }该实现表明Olares 各服务通过环境变量NATS_HOST、NATS_PORT、NATS_USERNAME、NATS_PASSWORD注入连接参数并配置了无限次重连MaxReconnects(-1)与 2 秒重连等待间隔保证消息总线的可用性。这正是控制面板中每个应用都有独立账号这一设计的落地——每个组件用自己专属的用户名/密码连接便于按应用审计与限权。主题命名与权限参考主题结构三级命名规范Olares 的 NATS 主题采用三级结构使用英文句点.分隔prefix.event.olaresId| 层级 | 名称 | 说明 | |--|--|--| | 第一级 |prefix| 来源标识。系统服务固定为os。第三方应用使用对应的appId。| | 第二级 |event| 标识事件或领域。示例users、groups、files、notification。 | | 第三级 |olaresId| 表示用户空间的 Olares ID。 |从控制面板的主题表格以及仓库源码均可验证这一规范os.application.olaresId应用生命周期事件。见 framework/app-service/pkg/event/event.go 中PublishAppEventToQueue的实现它以fmt.Sprintf(os.application.%s, p.Owner)构造发布目标即第三级取自事件的所属用户Owner的 Olares IDos.users用户变更事件。同文件中的PublishUserEventToQueue将用户主题固定为os.users消息体为UserEvent含topic与payload.user/payload.operator/payload.timestamp字段os.notification系统通知主题。见 framework/app-service/pkg/compute/notification.go其中定义了notificationSubject os.notification计算资源不足时如 GPU 模式无可用算力通过PublishToQueue(os.notification, data)发布ApplicationComputeResourceInsufficient类型的资源告警载荷包含user、appName、namespace、resource、mode、reason、message、timestamp等字段os.files.*文件相关主题控制面板中由files-server-nat用户os-files-server绑定。可以推断三级结构中的第三级olaresId正是为了实现按用户隔离——每个用户空间的主题独立成段天然支持权限按用户粒度裁剪这与下文权限模型的设计互为表里。权限模型按应用类型划分读写范围主题的读写权限根据应用类型的不同而有所区别| 应用类型 | 权限范围 | 说明 | |--|--|--| | 用户空间应用 | 只读 | 只能订阅包含自身olaresId的三级主题。 | | 系统/集群应用 | 系统级访问 |订阅可订阅系统级 Subject例如os.users、os.groups。写入可在自身空间内向二级主题发布消息。全局读取订阅所有二级主题的读权限需单独申请。|结合源码可以进一步理解该模型的工程含义系统服务拥有写入与订阅能力app-service既要发布应用事件os.application.olaresId也要读取用户事件os.users等系统级主题因此其账号os-app-service属于系统级访问。订阅端接收事件后驱动的典型流程可以参考 framework/app-service/pkg/event/event.go 中的QueuedEventController它基于workqueue.RateLimitingInterface限速队列 单 worker 协程消费消息发布失败会重试失败后间隔 1 秒重新入队尝试并复用单一共享的 JetStream 连接ensureNatsConnected在连接失效时自动重建从而保证 NATS 发布的高可靠与有序性发布走 JetStream 流从 framework/app-service/pkg/utils/nats.go 的publish函数可见所有事件发布均通过jetstream.New(nc)创建 JetStream 上下文后调用js.Publish(ctx, subject, d)完成并带有 10 秒超时natsPublishTimeout 10 * time.Second。这也解释了 CLI 订阅时为何要加--all参数——它确保既能看到普通消息也能看到 JetStream 流中的消息权限由 NATS 服务端统一裁决nats-box订阅/发布时以控制面板下发的用户名密码登录NATS 服务端根据该账号绑定的主题规则放行或拒绝。若订阅命令长时间无输出或返回权限错误应优先检查使用的主题是否与账号绑定的主题段匹配用户空间应用只能读写包含自身olaresId的主题是否用错了账号如将应用专属账号用于系统级主题全局读取权限是否已单独申请系统应用订阅所有二级主题需额外授权。中间件接入规范为什么是系统级 NATS需要特别指出的是Olares 将 NATS 视为集群级中间件而非应用自带组件。从 CLI 的 Chart 转换规范 cli/skills/olares-chart/references/olares-chart-from-compose.md 和 cli/skills/olares-chart/references/olares-chart-middleware.md 可见默认规则是Compose 中自带的postgres/redis/mongodb/mysql/mariadb/minio/rabbitmq/nats等服务必须移除并接入 Olares 托管的系统中间件自带数据库属于例外场景需明确命名理由。这意味着第三方应用接入消息能力时应使用 Olares 提供的系统 NATS 实例与账号而非在应用内自建 NATS应用自身的appId会作为prefix出现在主题第一级从而与系统服务的os前缀天然区分结合olares-cli cluster middleware list的--type nats过滤能力可以随时确认集群中 NATS 实例的运行状态与连接信息。总结一条完整的消息验证闭环将以上内容串成一次完整的实战流程取凭证控制面板 → 中间件 → Nats记录主题、用户、密码或使用olares-cli cluster middleware list --type nats -o json --show-passwords程序化获取装工具下载nats-box.yaml并kubectl apply -f nats-box.yaml随后kubectl exec -it -n os-platform nats-box-pod -- sh进入容器验订阅nats sub 主题 --user用户 --password密码 --all验发布另开会话执行nats pub 主题 {hello:world} --user用户 --password密码观察订阅端是否收到消息查权限若失败对照主题三级结构prefix.event.olaresId与应用类型权限模型定位原因用户空间应用只读自身olaresId主题系统/集群应用订阅系统级 Subject、在自身空间写入二级主题全局读取需单独申请。理解这套三级主题命名 按应用类型授权 JetStream 可靠发布的设计不仅能帮助你快速完成 NATS 联调也能让你在阅读 framework/app-service/pkg/event/event.go、framework/app-service/pkg/compute/notification.go 等源码时一眼看懂 Olares 内部各服务之间事件流转的完整路径。赞分享云原生后端运维【免费下载链接】TerminusOpen-Source Personal Cloud OS for Always-On Agents项目地址https://gitcode.com/gh_mirrors/terminus2/Terminus点击查看免费下载相关推荐Olares NATS 消息订阅与发布实战nats-box 用法、主题命名规范与权限模型全解析Olares NATS 消息订阅与发布实战nats box 用法、主题命名规范与权限模型全解析 本指南以 OlaresTerminus 开源项目内置的 N云原生后端运维革命性消息系统nats-server高性能发布订阅新范式革命性消息系统nats server高性能发布订阅新范式 痛点传统消息系统的性能瓶颈 还在为传统消息中间件的性能瓶颈而烦恼分布式系统通信中你是否遇到过后端消息队列消息路由通信CAP 8.2.0 版本发布详解NATS 自定义消息头、订阅组并发与 CapHeader 响应控制CAP 8.2.0 版本发布详解NATS 自定义消息头、订阅组并发与 CapHeader 响应控制 本指南以 release notes.md https:/后端消息队列微服务消息路由上一篇Erlang/OTP Mnesia 入门实战从零创建你的第一个数据库下一篇RR项目DS3617xs型号定制镜像构建技术解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

MNN Chat 实战:Android 端侧多模态大模型的直装、编译与性能全链路

MNN Chat 实战:Android 端侧多模态大模型的直装、编译与性能全链路

MNN Chat 实战:Android 端侧多模态大模型的直装、编译与性能全链路 【免费下载链接】MNN MNN: A blazing-fast, lightweight inference engine battle-tested by Alibaba, powering high-performance on-device LLMs and Edge AI. 项目地址: https://gitcode.com/…

📅 2026/10/16 1:46:29
如何 10 分钟生成黑苹果可启动的 OpenCore EFI:OpCore-Simplify 快速指南

如何 10 分钟生成黑苹果可启动的 OpenCore EFI:OpCore-Simplify 快速指南

如何 10 分钟生成黑苹果可启动的 OpenCore EFI:OpCore-Simplify 快速指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 从克隆仓库到拿到…

📅 2026/10/16 1:41:29
OpenProject 快速上手指南:Docker 十分钟装好开源项目管理,从建项目到排甘特图

OpenProject 快速上手指南:Docker 十分钟装好开源项目管理,从建项目到排甘特图

OpenProject 快速上手指南:Docker 十分钟装好开源项目管理,从建项目到排甘特图 【免费下载链接】openproject OpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira al…

📅 2026/10/16 1:41:29
MORE NEWS

更多资讯

📰

ViT图像分类实战:猫狗分类任务中的Patch切分与微调技巧

简介:面向Transformer初学者的视觉Transformer(ViT)实战项目,以经典的猫狗数据集完成图像分类全流程。项目覆盖数据读取、模型搭建、训练与评估等关键环节,代码结构清晰、注释到位,适合零基础或刚接触注意力…

📰

JavaWeb学生成绩管理系统:Servlet+JSP+JDBC三层架构实战解析

简介:面向JavaWeb学习者与课程设计人群,这是一份学生成绩管理系统完整项目,基于Servlet、JSP、JSTL、EL等技术栈,配合Eclipse与SQL Server实现成绩录入、查询、统计分析和报表生成,适合毕业设计、课设或项目实践参考。…

📰

MCreator 基岩版方块模型完全指南:Normal / Cross / 单纹理 / 自定义 `.geo.json` 模型的选择与渲染原理

低代码代码生成桌面应用游戏开发 【免费下载链接】MCreator MCreator is an open-source software used to make Minecraft Java Edition mods, Minecraft Bedrock Edition Add-Ons, resource packs, and data packs using an intuitive easy-to-learn interface or with an in…

📰

instagram-private-api 内联子评论响应结构详解:MediaInlineChildCommentsFeedResponseChildCommentsItem 接口深度剖析

后端 【免费下载链接】instagram-private-api NodeJS Instagram private API SDK. Written in TypeScript. 项目地址: https://gitcode.com/gh_mirrors/in/instagram-private-api 点击查看 免费下载 本文围绕 instagram-private-api(TypeScript 编写的 …

📰

Calibre 电子书格式转换:3 次点击,让书进库就能发到任何阅读器

Calibre 电子书格式转换:3 次点击,让书进库就能发到任何阅读器 【免费下载链接】calibre The official source code repository for the calibre ebook manager 项目地址: https://gitcode.com/GitHub_Trending/ca/calibre Calibre 是一款免费开源…

📰

Flink CDC 同步达梦数据库:日志解析实现实时同步实践

简介:FlinkCDC与达梦数据库基于日志的实时同步方案,是一套面向大数据工程师、数据仓库运维及实时计算开发者的实践资源包。该方案通过解析达梦数据库日志捕获增、删、改等变更操作,相比传统定时抽取,能显著降低对源库的性能影响&a…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬