云原生后端运维【免费下载链接】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),仅供参考