Terminus(Olares)RabbitMQ 中间件集成实战:用 OlaresManifest.yaml 声明式接入消息队列
云原生后端运维【免费下载链接】TerminusOpen-Source Personal Cloud OS for Always-On Agents项目地址https://gitcode.com/gh_mirrors/terminus2/Terminus点击查看免费下载本篇技术指南基于 Terminus 仓库中 RabbitMQ 集成文档 展开讲解如何在 Olares 上安装 RabbitMQ 服务、通过OlaresManifest.yaml声明式申请 RabbitMQ 用户与 vhost并把系统注入的.Values.rabbitmq.*值映射为容器环境变量。读完本篇你将掌握完整的接入步骤、RabbitMQ values 参考表并能从源码层面理解 Olares 是如何在部署时生成MiddlewareRequest、注入连接凭据并校验服务就绪状态的。前置条件与安装 RabbitMQ 服务在声明集成之前必须先让集群中实际存在一个可用的 RabbitMQ 实例。Olares 以 Market 应用的形式提供 RabbitMQ 服务安装方式如下从 Launchpad 打开 Market搜索 RabbitMQ。点击Get再点击Install等待安装完成。安装完成后该服务及其连接详情会出现在 Control Hub 的 Middleware 列表中。为什么这一步是硬性前置条件从源码结构看Olares 在应用部署前会校验所声明的中间件是否就绪validate.go 中当OlaresManifest.yaml声明了middleware.rabbitmq时平台会读取名为rabbitmq-middleware-rabbitmq的ApplicationManager资源只有其status.state为running才放行。若 RabbitMQ 服务未安装或仍在安装中依赖它的应用无法完成部署——这与 中间件总览 中集成是声明式的、由 Olares 在部署时处理的描述一致。此外若需要在安装后查看队列、交换机等资源可参考 查看与访问 RabbitMQ 数据 一文使用 RabbitMQ Dashboard 进行图形化管理。配置OlaresManifest.yaml在OlaresManifest.yaml的middleware下添加rabbitmq配置段username字段指定你期望的 RabbitMQ 用户名。vhosts字段申请一个或多个虚拟主机vhost每个 vhost 以name声明该名称将作为.Values.rabbitmq.vhosts中的 key。完整示例middleware: rabbitmq: username: rabbitmquser vhosts: - name: aaa源码视角这段声明最终变成了什么OlaresManifest.yaml中的middleware.rabbitmq对应 Go 类型RabbitMQConfig含Username、Password、VHosts等字段该类型定义在共享 manifest 包中并被 app-service 直接别名引用见 middleware_types.goRabbitMQConfig manifest.RabbitMQConfig VHost manifest.VHost部署时middleware.go 中的Apply函数处理middleware.RabbitMQ ! nil分支关键逻辑有三点用户名是拼装出来的最终注册到 RabbitMQ 的用户名并非你写的rabbitmquser原值而是按下述格式拼装的复合名用于在共享服务中隔离不同应用username : fmt.Sprintf(%s-%s-%s, middleware.RabbitMQ.Username, ownerName, appName)即manifest中username-属主名-应用名。你注入到环境变量的.Values.rabbitmq.username是拼装后的最终用户名应用无需关心拼装规则直接使用注入值即可。密码支持两种来源在 middleware.go 的 process 函数 中若password为空平台会先调用CreateOrUpdateSecret创建 Secret并在渲染MiddlewareRequest时改用secretKeyRef引用若直接给出password则明文写入请求对象。对应的 YAML 模板见 middleware_request_tpl.goconst rabbitmqRequest apiVersion: apr.bytetrade.io/v1alpha1 kind: MiddlewareRequest metadata: name: {{ .AppName }}-rabbitmq namespace: {{ .Namespace }} spec: app: {{ .AppName }} appNamespace: {{ .AppNamespace }} middleware: rabbitmq rabbitmq: vhosts: {{- range $k, $v : .Middleware.VHosts }} - name: {{ $v.Name }} {{- end }} password: {{- if not (eq .Middleware.Password ) }} value: {{ .Middleware.Password }} {{- else }} valueFrom: secretKeyRef: name: {{ .AppName }}-{{ .Namespace }}-rabbitmq-password key: password {{- end }} user: {{ .Middleware.Username }} 请求是幂等提交的genRabbitMQRequest渲染模板后由CreateOrUpdateMiddlewareRequest在集群中创建或更新该MiddlewareRequest资源middleware.go因此重复部署不会重复申请资源。模板渲染入口在 middleware_request_tpl.go 的 genRabbitMQRequest它把App、AppNamespace、Namespace和RabbitMQConfig含VHosts列表组装为渲染数据。平台侧注入流程从 MiddlewareRequest 到.Values.rabbitmq.*提交MiddlewareRequest后app-service 通过 HTTP 向中间件服务查询最终凭据。middleware.go 中getMiddlewareRequest函数向http://middleware-service.os-platform/middleware/v1/request/info发起 POST 请求携带App、AppNamespace、Namespace、Middleware: rabbitmq并对 404/429/5xx 做最多 3 次重试。请求体与响应结构同样定义在该文件type MiddlewareRequestResp struct { MiddlewareRequestInfo Host string json:host Port int32 json:port Vhosts map[string]string json:vhosts // ... }查询成功后结果被写入 Helm 渲染上下文vals[rabbitmq] map[string]interface{}{ host: resp.Host, port: resp.Port, username: resp.UserName, password: resp.Password, vhosts: resp.Vhosts, }这些 key 与你后续在部署 YAML 中引用的.Values.rabbitmq.*一一对应。Olares 的 Helm 渲染器也会为 chart 预置兜底结构values.go 中默认提供rabbitmq: map[string]interface{}{vhosts: map[string]interface{}{}}保证未声明 vhost 时模板渲染不会因缺失 key 而失败。将注入值映射为环境变量在你的部署 YAMLchart 模板中把.Values.rabbitmq.*映射到应用需要的环境变量。RabbitMQ 对应的完整映射示例如下containers: - name: my-app # For RabbitMQ, the corresponding values are as follows env: - name: RABBITMQ_HOST value: {{ .Values.rabbitmq.host }} - name: RABBITMQ_PORT value: {{ .Values.rabbitmq.port }} - name: RABBITMQ_USER value: {{ .Values.rabbitmq.username }} - name: RABBITMQ_PASSWORD value: {{ .Values.rabbitmq.password }} # Vhost # The vhost name configured in OlaresManifest (e.g., aaa) - name: RABBITMQ_VHOST value: {{ .Values.rabbitmq.vhosts.aaa }}几点说明RABBITMQ_HOST/RABBITMQ_PORT/RABBITMQ_USER/RABBITMQ_PASSWORD直接取自注入值的同名字段无需任何加工。vhost 是MapString,String结构key 就是你在OlaresManifest.yaml的vhosts[].name中声明的名称示例中为aaa。因此模板里写作.Values.rabbitmq.vhosts.aaa声明多个 vhost 时按各自 name 取对应 key。模板语法是 Helm/Go template 形式最终渲染发生在 Helm 部署阶段运行容器只看到渲染后的具体值。构造 RabbitMQ 连接 URI环境变量就绪后应用代码中读取它们并拼接 AMQP 连接串即可。原文档给出的 Go 示例// Read environment variables user : os.Getenv(RABBITMQ_USER) password : os.Getenv(RABBITMQ_PASSWORD) vhost : os.Getenv(RABBITMQ_VHOST) host : os.Getenv(RABBITMQ_HOST) portMQ : os.Getenv(RABBITMQ_PORT) // Construct AMQP connection string // Format: amqp://user:passwordhost:port/vhost url : fmt.Sprintf(amqp://%s:%s%s:%s/%s, user, password, host, portMQ, vhost)该格式为标准 AMQP URIamqp://user:passwordhost:port/vhost任何语言的 AMQP 客户端如amqp091-go、pika都可以直接以该 URL 建连。注意vhost位于 URI 路径段而不是 query 参数这也是 RabbitMQ 多租户隔离的基本单元——每个 vhost 下的队列、交换机、用户权限相互独立。RabbitMQ values 参考表RabbitMQ values 是部署时注入到values.yaml的预定义运行时值由系统管理、用户不可编辑ValueTypeDescription.Values.rabbitmq.hostStringRabbitMQ host.Values.rabbitmq.portNumberRabbitMQ port.Values.rabbitmq.usernameStringRabbitMQ username.Values.rabbitmq.passwordStringRabbitMQ password.Values.rabbitmq.vhostsMapString,StringRequested vhosts, keyed by vhost name. For example, a request formyvhostis available at.Values.rabbitmq.vhosts.myvhost.从源码结构看该表与 middleware.go 中写入 vals 的 map 完全一致host、port、username、password、vhosts五个字段即全部注入内容vhosts为按名称取值的 map。小结与延伸阅读集成 RabbitMQ 只需三步Market 安装 RabbitMQ 服务 → 在OlaresManifest.yaml声明middleware.rabbitmqusernamevhosts→ 在部署 YAML 中把.Values.rabbitmq.*映射为环境变量应用内按amqp://user:passwordhost:port/vhost建连。平台侧的MiddlewareRequest创建、凭据查询与注入均由 app-service 在部署时自动完成且以ApplicationManager的 running 状态作为就绪门禁开发者无需手写任何连接配置。更多中间件集成指南PostgreSQL、Redis、MongoDB、MinIO 等见 Olares 中间件总览访问与排查 RabbitMQ 资源见 查看与访问 RabbitMQ 数据。赞分享云原生后端运维【免费下载链接】TerminusOpen-Source Personal Cloud OS for Always-On Agents项目地址https://gitcode.com/gh_mirrors/terminus2/Terminus点击查看免费下载相关推荐TerminusOlaresPostgreSQL 中间件集成指南从 OlaresManifest.yaml 声明到应用连接信息注入TerminusOlaresPostgreSQL 中间件集成指南从 OlaresManifest.yaml 声明到应用连接信息注入 在 Terminus云原生后端运维Terminus 中集成 MariaDB 中间件通过 OlaresManifest.yaml 声明式接入应用数据库Terminus 中集成 MariaDB 中间件通过 OlaresManifest.yaml 声明式接入应用数据库 本文基于 Terminus 仓库中的官方文云原生后端运维在 OlaresTerminus中声明式接入 MinIO从 OlaresManifest.yaml 到容器环境变量映射在 OlaresTerminus中声明式接入 MinIO从 OlaresManifest.yaml 到容器环境变量映射 本篇基于 Terminus 仓库的云原生后端运维创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

九轴姿态解算实战:C语言实现Mahony互补滤波与四元数融合

九轴姿态解算实战:C语言实现Mahony互补滤波与四元数融合

简介:九轴姿态解算源代码是一套面向嵌入式开发、无人机及机器人等场景的C语言实现,融合加速度计、磁力计与陀螺仪数据,用于实时估计物体的横滚、俯仰与偏航角。资源包含4个文件,全部为2个C源文件和2个头文件,压缩包仅5…

2026/10/14 17:36:00 阅读更多 →
C#工业级图形面积周长计算:精度、鲁棒性与性能平衡

C#工业级图形面积周长计算:精度、鲁棒性与性能平衡

1. 项目概述:为什么一个“图形周长、面积计算”功能值得花时间深挖? 你可能第一眼看到“C# 图形周长、面积计算”这个标题,会下意识觉得:“不就是几个数学公式封装成方法吗?勾股定理、πr、底高2……抄一遍就完事。”我…

2026/10/14 17:34:59 阅读更多 →
高等数学自学指南:构建求导法则与高阶导数的完整知识体系

高等数学自学指南:构建求导法则与高阶导数的完整知识体系

8月22日那天,我按计划自学同济版高数第二章第二节和第三节,对应教材就是“函数的求导法则”与“高阶导数”。说实话,这两节的内容量不算大,但真正学进去之后我发现,它们几乎决定了后面所有章节的做题手感。许多自学的朋…

2026/10/14 17:34:59 阅读更多 →

最新新闻

JavaScript sort排序原理与常见陷阱解析

JavaScript sort排序原理与常见陷阱解析

先说个我自己的真实经历。有次帮同事排查一个列表排序问题,数据是几组数字,他写了 arr.sort() ,结果排出来是 [1, 10, 2, 22, 3] 这种完全看不懂的顺序。他盯着屏幕看了半天,第一反应是"sort排序坏了"。其实不是坏了…

2026/10/14 18:21:46 阅读更多 →
MATLAB动态仿真牛顿环:从光程差公式到GIF动图实现

MATLAB动态仿真牛顿环:从光程差公式到GIF动图实现

简介:基于MATLAB开发的牛顿环动态光学仿真资源,面向光电信息科学与工程专业本科生、高校教师及光学实验研究者,涉及等厚干涉、光程差等核心概念,用于直观理解厚度变化对干涉条纹的影响。资源仅4个文件,包含可自定义参数…

2026/10/14 18:21:46 阅读更多 →
刚注册完不会核销?卡点在建店和授权:商户 → 门店 shopId → 美团/抖音授权

刚注册完不会核销?卡点在建店和授权:商户 → 门店 shopId → 美团/抖音授权

核销服务由无限聚核提供,美团、抖音团购核销一站式接入。账号注册好了,开发者中心也能看到 API Key,一点核销却报「门店不存在」「未授权」——现场最常见的不是接口写错,而是还没建具体门店,或者建了商户却拿商户 ID …

2026/10/14 18:21:46 阅读更多 →
AI视频生成时间一致性难题:从DiT架构到VAE的时空建模与后处理全解析

AI视频生成时间一致性难题:从DiT架构到VAE的时空建模与后处理全解析

1. AI视频生成的核心痛点:为什么时间一致性这么难1.1 从单帧到连续画面,问题出在哪做AI视频生成的人都有一个共同体会:单张图看着挺惊艳,一连起来就露馅。人物的脸在第三帧还是张三,到第八帧就变成了李四;衣…

2026/10/14 18:21:46 阅读更多 →
具身智能的底层逻辑:实时音视频与VLA模型如何驱动机器人

具身智能的底层逻辑:实时音视频与VLA模型如何驱动机器人

1. 从一句提问说起:人形机器人真的是具身智能的终点吗前阵子在一个技术交流群里,有人抛出一个问题:“人形机器人是不是具身智能的终极形态?”底下吵成一片。做机械臂的说不一定,做四足的说人形只是其中一种载体&#x…

2026/10/14 18:21:46 阅读更多 →
快速阅读不靠眼快:筛选与理解的实用框架

快速阅读不靠眼快:筛选与理解的实用框架

经常有人问我:“你读书怎么那么快?是不是一目十行、走马观花?”说实话,我刚开始试水快速阅读的时候也踩过不少坑,最典型的表现是字都看完了,合上书一问三不知。后来我花了很长时间去拆解“快速阅读”和“快…

2026/10/14 18:20:44 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →