跳到主要内容

声明式SEMP

本节提供了关于 Solace PubSub+ 声明式 SEMP 的信息.

PubSub+ 声明式 SEMP 允许您通过声明多个配置对象的状态并将其同步到事件代理来配置 PubSub+ 事件代理(包括设备和软件).

概述

PubSub+ 声明式 SEMP 为 PubSub+ 事件代理的服务配置提供了一个声明式 API.声明式 API 配置依赖于目标配置,而不需要了解当前配置.然后,声明式配置系统确定如何从当前状态转换为目标状态.

更具体地说,声明式 SEMP 提供了一个基于模块概念的声明式 API,模块是一个包含配置信息的数据结构,插件将模块和 CRUD 指令以声明式方式映射到 SEMPv2 API.声明式 SEMP 接口的典型指令包括:

  • 生成—提供输入模块中描述的对象的当前配置作为 Hashicorp 配置语言(HCL)基础设施即代码(IaC)文件.

  • 计划—识别要应用的更改系列,以将当前配置转换为目标配置 IaC 目录.

  • 应用—应用接受一个计划或目标配置 IaC 目录并执行它,以将当前配置转换为目标配置.

  • 销毁—生成一个计划以移除目标配置 IaC 目录中的配置元素.

img

虽然声明式 SEMP API 可以用于各种应用程序,但此功能最初仅限于服务配置,即由 PubSub+ 事件代理管理器配置的消息 VPN 内的配置元素.

用例

声明式配置的良好使用示例包括黄金配置、配置管理系统以及来自消息基础设施团队以外的团队的服务添加.

PubSub+ 声明式 SEMP 支持以下使用案例:

  • 应用程序团队自助服务基础设施即代码与环境分离
  • 配置管理

应用程序团队自助服务基础设施即代码与环境分离

在这种情况下,假设您已经部署了一个事件网格,您的应用程序团队开始大规模采用事件网格的使用.您的消息基础设施团队无法跟上配置事件网格基础设施上的消费者和生产者的请求.您需要 Solace 提供一种能力,使您的应用程序团队能够编写 IaC 以在您团队已经创建的代理环境中添加或移除消费者和/或生产者以及其他非环境组件,同时在某些约束内.您还需要能够将服务从一个环境复制到下一个环境(例如,在 CICD 管道中).最后,您需要能够为应用程序团队提供模板(例如,不同类型的队列)以在他们的 IaC 中利用.

配置管理

在这种情况下,假设您已经部署了一个事件网格,您的应用程序团队开始大规模采用事件网格的使用.然而,这一次您需要能够拉取事件网格上服务(非基础设施组件)的当前配置,并将其保存在版本控制的配置文件集中.这些版本控制文件可以用于在配置损坏或重新配置事件网格服务失败时,将事件网格服务恢复到同一环境中的先前配置.版本控制配置也可以手动修改以将这些服务应用于其他环境.

依赖关系

PubSub+ 声明式 SEMP 有以下依赖关系:

  • 需要 Terraform.Terraform 是一个命令行程序,它应用声明式配置以创建或更新一组资源(SEMP 对象对应于 Terraform 中的资源).提供程序是根据需要从公共 Terraform 注册表或从配置中指定的私有注册表自动下载的.标准 Terraform 公共注册表中提供了 PubSub+ 事件代理提供程序.有两个提供程序,一个用于设备,一个用于软件事件代理,您也可以使用它们来配置 PubSub+ Cloud 服务.有关 Terraform 的更多信息,请参阅 https://www.terraform.io/.

  • 为了正确配置特定版本的事件代理对象,您必须使用适当的事件代理提供程序和 SEMPv2 版本.有关更多信息,请参阅版本兼容性.

限制

PubSub+ 声明式 SEMP 有以下限制:

  • Terraform apply 不会是原子性的.如果被用户、失败、重启或切换中断,配置更改可能会部分应用,并且不会尝试回滚更改.

  • Terraform 必须是配置的权威来源.如果 Terraform 控制的配置与现有配置或来自其他管理接口的修改之间存在重叠,行为将是未定义的.

  • 应用操作可能会对性能产生影响(尤其是大规模更改).

  • 配置的应用可能不是无损的.换句话说,在应用过程中可能会发生短暂的服务中断.这些包括队列可能错过发布的消息,或客户端被短暂断开连接.

  • 声明式 SEMP 不支持 OpenTofu.

  • 声明式 SEMP 仅在生产环境中支持特定于消息 VPN 的配置元素.换句话说,您可以通过 PubSub+ 事件代理管理器在消息 VPN 下配置的元素.不支持使用不在消息 VPN 内的任何资源.

在消息 VPN 内部,以下对象与其他对象耦合并受到额外限制:

  • ACL 配置文件—您不能在不移除引用该配置文件的所有对象的耦合的情况下销毁 ACL 配置文件.

  • 用户配置文件—您不能在不移除引用该配置文件的所有对象的耦合的情况下销毁用户配置文件.

  • 授权组—您不能在不移除引用该组的所有对象的耦合的情况下销毁授权组.

  • LDAP 组—您不能在不移除引用该组的所有对象的耦合的情况下销毁 LDAP 组.

  • RDP 消费者 OAuth JWT 声明—您不能使用声明式 SEMP 管理 RDP 消费者 OAuth JWT 声明.

开始使用PubSub+ 声明式SEMP

有关如何使用 Solace 事件代理提供程序执行针对 PubSub+ 事件代理配置的操作的描述,请参阅每个提供程序中包含的文档:

有关如何使用事件代理提供程序执行针对 PubSub+ 事件代理配置的操作的描述,请参阅提供程序中包含的文档.

事件代理提供程序还提供了从预配置的事件代理生成配置文件的能力.有关更多信息,请参阅软件事件代理或设备提供程序文档.

Terraform 使用蛇形命名方案,而 SEMP 使用驼峰命名.同时,资源和数据源以提供程序的首选本地名称为前缀也是通用做法.SEMP 名称将根据这两个要求进行适当转换,否则将按原样使用.例如,这意味着 solacebroker_msg_vpn 是消息 VPN 资源名称,max_subscription_count 是最大订阅计数的属性,因为 MsgVpn 是 SEMP API 对象名称,maxSubscriptionCount 是 SEMP 属性的名称.

PubSub+ Terraform 模块

Terraform 模块将一组相关 Terraform 资源的配置封装到一个模块块中.模块的输入变量成为模块块的可配置属性.模块的输出变量成为可以从模块对象其他地方引用的属性.

Solace 在每个提供程序中包括以下 Terraform 模块:

  • 服务模块

  • 客户端模块

  • JNDI 模块

  • 队列端点模块

  • REST 交付模块

这些模块的意图是提供一个默认配置,中间件团队可以对其进行修改并传递给应用程序开发团队进行进一步调整.

以下图表描述了每个模块之间的关系:

img

服务模块

服务模块封装了消息 VPN 级别的服务配置,包括协议、认证和授权设置以及资源限制.它定义并使 ACL 和客户端配置文件可供使用.

有关更多信息,包括显示常见用例的示例,请参阅服务 Terraform 模块文档.

客户端模块

客户端模块表示客户端用户实体,可以是客户端用户名或授权组.

有关更多信息,包括显示常见用例的示例,请参阅客户端 Terraform 模块文档.

JNDI 模块

JNDI 模块为 JMS 连接工厂事件代理对象提供包装.更具体地说,该模块使应用程序团队成员能够在事件代理的 JNDI 存储中创建连接工厂对象,而只需提供资源特定的信息,而无需深入了解所有必要的 Solace 配置组件.

有关更多信息,包括显示常见用例的示例,请参阅 JNDI Terraform 模块文档.

队列端点模块

队列端点模块表示一个持久的事件代理端点,用于发布或消费.此外,它还可以表示一个端点模板.

有关更多信息,包括显示常见用例的示例,请参阅队列端点 Terraform 模块文档.

REST 交付模块

REST 交付模块表示 REST 交付点(RDP)、REST 消费者和队列绑定配置.更具体地说,该模块使应用程序团队成员能够通过仅提供资源特定的信息,创建一个连接到消费者(例如,公共云)的 RDP,而无需深入了解所有必要的 Solace 配置组件.

有关更多信息,包括显示用例的示例,请参阅 REST 交付 Terraform 模块文档.

版本兼容性

本节列出了 PubSub+ 事件代理的版本及其对应的必需 PubSub+ 提供程序和 SEMPv2 版本.BETA 版本的 PubSub+ 提供程序不支持在生产环境中使用.

PubSub+ 事件代理版本PubSub+ 事件代理提供程序版本SEMPv2 版本
10.9.11.1.02.42
10.8.11.02.41
10.6.10.9.3 (BETA)2.39
10.4.10.9.0 (BETA)2.36

如果您使用较旧的 Solace 事件代理提供程序与较新的事件代理,您将无法配置可能随新事件代理负载一起提供的新资源.同样,对于较旧的事件代理与较新的 Solace 提供程序,您可能能够创建事件代理不支持的资源.在这种情况下,您的 Terraform 配置将失败,因为 SEMP 没有能力配置您的请求.