跳到主要内容

使用传统SEMP

本节提供了关于较旧版本的 SEMP,即 SEMP v1 的信息,它使用 XML 模式来监控和管理事件代理.有关当前 SEMP 版本 SEMP v2 的信息,请参阅 SEMP.您应该注意,不支持同时使用 SEMP v2 和传统 SEMP/CLI 配置相同的事件代理对象,这可能会导致意外行为.

使用SEMP v1管理和监控事件代理

Solace 元素管理协议(SEMP v1)是一个请求/响应协议,使用 XML 模式来标识事件代理中可用的所有管理对象.通过事件代理命令行界面(CLI)或 SolAdmin 可用的任何对象也通过 SEMP v1 可用.

应用程序可以使用 SEMP v1 来管理和监控事件代理.它使用简单的请求/响应范式向事件代理发送 XML 编码的请求,并接收相应的 XML 编码的响应.这些请求和响应与 Solace CLI 提供的命令和响应相对应.

通过传统 SEMP 或 SolAdmin(使用传统 SEMP)运行 gather-diagnostics 将停止所有其他 SEMP 请求的处理,直到 gather-diagnostics 完成为止.运行 gather-diagnostics 通常需要几分钟时间.如果这是一个问题,我们建议您通过 Solace CLI 运行 gather-diagnostics.

SEMP v1 XML 编码的命令和响应要么包装在 HTTP 请求和响应中并通过 TCP 连接发送(SEMP v1 请求通过 HTTP)到管理接口,要么通过事件代理消息总线(SEMP v1 请求通过消息总线)使用 PubSub+ 消息 API 或任何支持请求/响应消息交换模式的消息协议发送.

以下图表展示了 SEMP v1 请求通过 HTTP 和 SEMP v1 请求通过消息总线的访问方法.

img

SEMP v1请求和响应模式文件

您可以通过以下方式之一获取 SEMP v1 模式文件:

  • 要获取 SEMP v1 请求模式文件,请对以下 URI 执行 GET 操作:
http://<HOST>/SEMP/v1/requestSchema.xsd
  • 要获取 SEMP v1 响应模式文件,请对以下 URI 执行 GET 操作:
http://<HOST>/SEMP/v1/replySchema.xsd

SEMP v1轮询频率指南

事件代理支持的最大 SEMP v1 轮询率为每秒十次请求.

当您使用 SEMP v1 分页并且返回 more-cookie 时,单页构成一个请求.有关超大响应和 more-cookie 的信息,请参阅 SEMP v1 分页.

由于可能返回的数据量较大,以下 SEMP v1 请求不应每 30 秒轮询一次:

  • show cache-instance <name> remote status
  • show cache-instance <name> remote topics
  • show queue <name> message-vpn <name> rates
  • show smrp subscriptions
  • show topic-endpoint <name> message-vpn <name> rates

响应返回所需的时间可能会根据事件代理上的信息量而有所不同.对于大量数据,轮询响应可能需要超过 30 秒.

以下 SEMP v1 请求不应进行轮询:

  • show queue <name> message-vpn <name> messages
  • show topic-endpoint <name> message-vpn <name> messages
  • show replay-log <name> message-vpn <name> messages

安全连接

应用程序可以选择创建到事件代理的安全连接,以保护认证信息和传输的数据.默认情况下,通过已建立的连接在管理应用程序和事件代理之间交换的 SEMP v1 数据以明文传输.安全连接使用传输层安全性(TLS)/ 安全套接字层(SSL)协议来加密交换的 SEMP v1 数据,以便 SEMP v1 数据通过 TCP 使用 TLS/SSL 而不是明文传输.

PubSub+ 事件代理支持 TLSv1.0、TLSv1.1 和 TLSv1.2(不支持 SSLv1.0、v2.0 和 v3.0).

要创建 TLS/SSL 加密连接,事件代理必须正确配置 TLS/SSL 服务,并且必须有适当的服务器证书.有关配置事件代理以允许安全连接的信息,请参阅 TLS / SSL 服务配置.

客户端还需要进行以下配置:

  • 使用 SEMP v1 通过 HTTP 时,必须指定 HTTPS URI 方案和安全端口(默认情况下,设备为端口 443,软件代理为端口 1943)以创建安全连接.
  • 使用 SEMP v1 通过消息总线服务时,必须指定多个 TLS/SSL 特定的会话属性以创建安全会话.

有关这些属性的信息,请参阅为 PubSub+ 消息 API 创建安全会话和/或为 JMS 的 PubSub+ 消息 API 创建安全连接.

SEMP v1请求通过HTTP服务

管理应用程序可以使用 SEMP v1 接口通过 HTTP 与事件代理通信,如下所示:

  1. 管理应用程序打开一个 TCP 连接. 有关使用哪个端口的信息,请参阅默认端口号(适用于设备和软件事件代理)和客户端应用程序连接性和安全性(适用于 PubSub+ Cloud).

要设置事件代理上的 SSL 监听端口,请参阅启用系统级 SEMP 服务.

  1. 然后,管理应用程序发送 HTTP POST 消息以向事件代理发出 SEMP v1 命令.

如果需要 TLS/SSL 连接,则必须使用 HTTPS URL 方案.

管理应用程序必须等待每个命令的响应,然后才能发出下一个命令.

  1. 事件代理为每个 HTTP POST 请求发送一个 HTTP 响应,包含 SEMP v1 响应.

此时,管理应用程序可以关闭连接,或者保持连接以用于未来的 HTTP POST 请求.

事件代理支持最多 500 个并发的 SEMP v1 请求通过 HTTP 会话.

SEMP v1请求通过消息总线服务

SEMP v1 请求通过消息总线功能作为 SEMP v1 请求通过 HTTP 传输服务支持的完整管理访问的轻量级替代方案提供.此功能允许支持请求/响应便捷功能和方法的网络管理和客户端应用程序管理事件代理.例如,使用消息 API 的客户端应用程序可以向使用特定命令主题的目的地发布请求,事件代理将响应返回给客户端应用程序.

MQTT 和 OpenMAMA 客户端不支持 SEMP v1 请求通过消息总线功能.

当为消息 VPN 启用 SEMP v1 请求通过消息总线时,可以为客户端应用程序提供对 show 用户 EXEC 命令、client 管理 EXEC 命令和 distributed cache 管理 EXEC 命令的访问权限,这些命令在客户端应用程序连接到的消息 VPN 内部.除非消息 VPN 被指定为管理消息 VPN,否则应用程序只能通过 show 命令请求数据,并为其连接到的消息 VPN 运行管理命令.事件代理将拒绝任何关于不在该消息 VPN 中的任何管理对象的信息请求.

默认情况下,通过连接会话在客户端应用程序和事件代理之间发送的 SEMP v1 数据以明文传输.然而,也可以建立使用 TLS/SSL 协议加密 SEMP v1 数据的安全会话.有关特定 TLS/SSL 会话属性和如何建立安全会话的信息,请参阅为 PubSub+ 消息 API 创建安全会话和/或为 JMS 的 PubSub+ 消息 API 的重要连接属性.

软件事件代理上的 SEMP v1 不支持 TLSv1.0.

SEMP v1格式

要使用 SEMP v1 请求传输服务,使用以下格式约定:

  • HTTP 请求格式
  • HTTP 响应格式
  • SEMP 模式版本
  • SEMP v1 命令格式
  • SEMP v1 响应格式

HTTP请求格式

以下是一个管理应用程序向事件代理发出 SEMP v1 命令的 HTTP POST 请求示例:

POST /SEMP HTTP/1.1
Authorization: Basic <usernameAndPassword>
Content-Length:<length>
<SEMP command>

其中:

<usernameAndPassword> 是用户的用户名和密码.用户名和密码必须按照 RFC 2617:第 2 节:基本认证方案进行编码.

还支持使用 HTTP 授权头中的一个或多个 OAuth 令牌作为承载者令牌进行 OAuth 认证.有关更多信息,请参阅 OAuth 认证.

<length> 表示跟随 HTTP 头的 SEMP v1 命令的长度(以字节为单位).

<SEMP command> 是正在发送的 SEMP v1 命令的内容(请参阅 SEMP v1 命令格式).应用程序只能为每个 HTTP POST 请求发送一个 SEMP v1 命令.

HTTP响应格式

以下是一个事件代理对管理应用程序的 SEMP v1 命令的 HTTP 响应示例:

HTTP/1.1 200 OK
Content-Length: <length>
<SEMP reply>

其中:

<length> 表示跟随 HTTP 头的 SEMP v1 响应的长度(以字节为单位).

<SEMP reply> 是事件代理返回的 SEMP v1 响应的内容(请参阅 SEMP v1 响应格式).

如果命令被事件代理接受(即使未成功执行),则返回 "200 OK" HTTP 响应.如果认证失败,则返回以下响应:

401 Unauthorized
Basic Realm="CLI"

如果 SEMP 响应指示失败,reasonCode="549"reason="SEMP response buffer allocation failed",则请求的响应很大,事件代理无法分配足够的内部资源来缓冲它.使用 SEMP v1 分页以避免导致此错误的过大响应.

SEMP模式版本

SEMP 使用 XML 模式来标识事件代理中可用的所有管理对象.

SEMP 命令包含一个可选的 SEMP v1 模式版本字符串,指定事件代理在验证命令时要使用的 SEMP 模式.

当命令被事件代理接收时,SEMP 模式版本字符串按以下方式处理:

  • 如果提供了版本字符串:

    • 并且与事件代理上安装的 SEMP 模式匹配,则使用指定的模式验证命令.
    • 并且不匹配任何安装的 SEMP 模式,则使用最新安装的模式验证命令.
  • 如果 提供版本字符串,则事件代理使用最新安装的模式验证命令.

从 PubSub+ 软件事件代理版本 8.7+ 和 PubSub+ 设备版本 8.3+ 开始,建议不在命令中包含 SEMP 版本字符串,并且只有在需要从特定 SEMP 模式中获取已知弃用行为时才包含一个.

SEMP模式版本支持政策

传统 SEMP 模式版本继续由新事件代理版本支持,自传统 SEMP 模式版本引入之日起六年.要识别给定事件代理版本支持的最低传统 SEMP 模式版本,请参阅 PubSub+ 事件代理 - 版本兼容性.

如果发送没有指定版本的传统 SEMP 请求,则事件代理使用其最新支持的模式版本来验证和处理请求.这是 Solace 的推荐方法.这种方法的一个潜在限制是,如果最新模式有不兼容的更改,则请求可能会停止工作.然而,Solace 预计此类更改很少见.

如果传统 SEMP 请求包含模式版本,并且请求发送到事件代理:

  • 支持该模式版本,则事件代理使用指定的模式版本验证和处理请求.
  • 不支持该模式版本,则事件代理尝试使用其最新支持的模式版本验证和处理请求.

SEMP v1命令格式

对于 SEMP v1 请求通过 HTTP 和 SEMP v1 请求通过消息总线访问方法,请求中的 SEMP v1 命令格式模仿 Solace CLI.每个 SEMP v1 命令相当于一个单独的 Solace CLI 命令.

SEMP v1 命令以 XML 格式格式化,遵循 SolacePubSub+ 软件发布包中提供的 semp-rpc-soltr.xsd 文件中的模式.在 SEMP v1 命令中,空白(包括行尾字符)是可选的.顶层元素是 <rpc>,下一级元素对应于正在发出的命令.在 <rpc> 元素内部是命令的关键词和参数.

示例

<rpc>
<show>
<client>
<name>*</name>
</client>
</show>
</rpc>

SEMP v1 不提供命令模式的概念.所有命令都在命令模式层次结构的顶层发出.特别是,enableconfigure 命令在 SEMP v1 中不需要也不支持.

如果需要从特定 SEMP v1 模式中获取已知弃用行为,则在 <rpc> 元素内部指定 SEMP v1 版本字符串.例如,要指定模式版本 10.2.1,请使用 <rpc semp-version="soltr/10_2_1">(对于设备)或 <rpc semp-version="soltr/10_2_1VMR" >(对于软件代理).

SEMP v1响应格式

对于 SEMP v1 请求通过 HTTP 和 SEMP v1 请求通过消息总线访问方法,SEMP v1 接口响应指示 SEMP v1 命令的成功或失败,以及任何失败的原因代码.SEMP v1 响应以 XML 格式格式化,遵循 semp-rpc-reply-soltr.xsd 文件中的模式.

以下是对 SEMP v1 命令格式中描述的命令的成功响应示例(在 SEMP v1 响应中,空白,包括行尾字符,是可选的):

<rpc-reply semp-version="soltr/10_3_0">
<rpc>
<show>
<client>
<primary-virtual-router>
<client>
<client-address>192.168.1.180:58305</client-address>
<name>s0001</name>
<profile>default</profile>
<num-subscriptions>1</num-subscriptions>
<message-vpn>default</message-vpn>
<description></description>
</client>
</primary-virtual-router>
<internal-virtual-router>
<client>
<client-address>127.55.55.55:56244</client-address>
<name>#client</name>
<profile>#client-profile</profile>
<num-subscriptions>2</num-subscriptions>
<message-vpn>default</message-vpn>
<description>Internal Message Bus</description>
</client>
</internal-virtual-router>
</client>
</show>
</rpc>
<execute-result code="ok"/>
</rpc-reply>

如上例所示,成功解析的 SEMP v1 命令始终生成 <rpc-reply><execute-result> 元素标签.此外,在 SEMP v1 show 命令的情况下,还会生成一些详细命令名称(无参数)和输出的元素标签.

execute-result 代码的值为 "ok" 或 "fail".对于失败,还提供了原因(由字符串表示)和原因代码(由整数表示).

使用cURL发布HTTP SEMP v1请求

以下简单示例展示了使用 cURL(http://curl.haxx.se/)向事件代理发布的简单 HTTP SEMP v1 请求.

使用 Solace CLI,您可以使用 show stats client 用户 EXEC 命令查看全局事件代理统计信息.以下片段显示了等效的 SEMP v1 请求的 XML:

<rpc>
<show>
<stats>
<client/>
</stats>
</show>
</rpc>

如果将此 XML 代码放入名为 request.xml 的文件中,您可以使用 cURL 将其发送到事件代理管理接口的 HTTP 监听端口.

PubSub+ 设备示例:

curl -d @request.xml -u username:password http://192.168.128.12:80/SEMP

PubSub+ 软件事件代理示例:

curl -d @request.xml -u username:password http://192.168.128.12:8080/SEMP

响应提供了与 Solace CLI 输出相同的客户端统计信息,但 SEMP v1 提供的这些统计信息以 XML 格式格式化(请参阅 SEMP v1 响应格式).

配置SEMP v1通过消息总线服务

SEMP v1 请求通过消息总线服务按每个消息 VPN 进行配置.

要通过 Solace CLI 在消息 VPN 上配置 SEMP v1 请求通过消息总线服务,请输入以下 CONFIG 命令:

solace(configure)# message-vpn <vpn-name>
solace(configure/message-vpn)# semp-over-msgbus
solace(configure/message-vpn/semp-msgbus)#

Solace CLI 现在处于指定消息 VPN 的 SEMP v1 请求通过消息总线服务的配置模式.

以下示例显示了 SEMP v1 请求通过消息总线服务命令树的层次结构.这展示了如何为消息 VPN 启用或禁用所有客户端对 SEMP v1 请求通过消息总线服务的访问,或限制客户端对特定管理命令和 show 命令的访问.

SEMP v1 通过消息总线服务命令层次结构

SEMP v1 over Message Bus:              Enabled/Disabled
Admin commands: Enabled/Disabled
Client commands: Enabled/Disabled
Distributed Cache commands: Enabled/Disabled
Show commands: Enabled/Disabled
Legacy Show Clear commands: Enabled/Disabled

要为消息 VPN 启用或禁用客户端对 SEMP v1 请求通过消息总线服务的访问,请参阅允许 SEMP v1 通过消息总线服务.

当启用 SEMP v1 请求通过消息总线服务时,您可以进一步控制客户端对以下命令的访问权限:

  • 为管理 VPN 启用 SEMP v1 服务
  • 允许 SEMP v1 通过消息总线服务
  • 允许访问管理命令
  • 允许访问 show 命令
  • 允许访问传统 show clear 命令

默认情况下,SEMP v1 请求通过消息总线服务为消息 VPN 启用,但对每个管理命令和 show 命令组的访问权限被禁用.

为管理VPN启用SEMP v1服务

要允许系统范围内的 SEMP v1 服务通过消息总线访问,您可以为被指定为管理消息 VPN 的消息 VPN 启用 SEMP v1 服务(请参阅指定管理消息 VPN).

可以为事件代理指定一个消息 VPN 作为管理消息 VPN.连接到管理消息 VPN 的客户端应用程序发布的 SEMP v1 请求可以请求系统级信息,以及事件代理上配置的任何消息 VPN 的信息.连接到管理消息 VPN 的客户端有权清除事件(在客户端或分布式缓存级别)和删除所有消息 VPN 中分布式缓存中的消息.

允许SEMP v1通过消息总线服务

  • 要允许客户端为给定消息 VPN 通过消息总线运行 SEMP v1 命令,请输入以下 CONFIG 命令:
solace(configure/message-vpn/semp-msgbus)# no shutdown

默认情况下,SEMP v1 请求通过消息总线服务为消息 VPN 启用.

  • 要不允许客户端为给定消息 VPN 通过消息总线运行 SEMP v1 命令,请输入以下 CONFIG 命令:
solace(configure/message-vpn/semp-msgbus)# shutdown

允许访问管理命令

管理 EXEC 命令包含客户端 EXEC 管理命令和分布式缓存管理 EXEC 命令.阻止客户端通过消息总线运行管理 EXEC 命令将拒绝他们对客户端 EXEC 管理命令和分布式缓存管理 EXEC 命令的访问.

  • 要允许客户端为给定消息 VPN 通过消息总线运行管理 EXEC 命令,请输入以下 CONFIG 命令:
solace(configure/message-vpn/semp-msgbus)# no admin-cmds shutdown
  • 要阻止客户端为给定消息 VPN 通过消息总线运行管理 EXEC 命令,请输入以下 CONFIG 命令:
solace(configure/message-vpn/semp-msgbus)# admin-cmds shutdown

默认情况下,不允许消息 VPN 的管理 EXEC SEMP 请求通过消息总线命令.

允许访问客户端管理命令

客户端 EXEC 管理命令可用于清除事件.

  • 要允许客户端为给定消息 VPN 通过消息总线运行客户端管理 EXEC 命令,请输入以下 CONFIG 命令:
solace(configure/message-vpn/semp-msgbus)# no admin-cmds client-cmds shutdown
  • 要阻止客户端为给定消息 VPN 通过消息总线运行客户端管理 EXEC 命令,请输入以下 CONFIG 命令:
solace(configure/message-vpn/semp-msgbus)# admin-cmds client-cmds shutdown

默认情况下,不允许消息 VPN 的客户端管理 EXEC SEMP 请求通过消息总线命令.

允许访问分布式缓存管理命令

分布式缓存管理 EXEC 命令可用于清除分布式缓存事件和删除给定分布式缓存中的消息.

  • 要允许客户端为给定消息 VPN 通过消息总线运行分布式缓存管理 EXEC 命令,请输入以下 CONFIG 命令:
solace(configure/message-vpn/semp-msgbus)# no admin-cmds distributed-cache-cmds shutdown
  • 要阻止客户端为给定消息 VPN 通过消息总线运行分布式缓存管理 EXEC 命令,请输入以下 CONFIG 命令:
solace(configure/message-vpn/semp-msgbus)# admin-cmds distributed-cache-cmds shutdown

默认情况下,不允许消息 VPN 的分布式缓存管理 EXEC SEMP 请求通过消息总线命令.

允许访问show命令

show 用户 EXEC 命令包括显示客户端连接到的消息 VPN 范围内的数据和统计信息的 show 命令.

  • 要允许客户端为给定消息 VPN 通过消息总线运行 show 用户 EXEC 命令,请输入以下 CONFIG 命令:
solace(configure/message-vpn/semp-msgbus)# no show-cmds shutdown
  • 要阻止客户端为给定消息 VPN 通过消息总线运行 show 用户 EXEC 命令,请输入以下 CONFIG 命令:
solace(configure/message-vpn/semp-msgbus)# show-cmds shutdown

默认情况下,不允许消息 VPN 的 show 用户 EXEC 请求通过消息总线命令.

允许访问传统show clear命令

默认情况下,传统 SEMP v1 访问(即,发布到主题 "#P2P/[router name]/#client/SEMP" 的 SEMP v1 show 和管理请求)在每个消息 VPN 上启用以实现向后兼容.然而,从事件代理版本 5.4 开始,传统 SEMP v1 访问已被弃用,建议您发布 SEMP show 和管理请求到当前主题 " #SEMP/<router name>/<cmd-topic>"(请参阅通过消息总线发布 SEMP v1 请求),并避免启用传统 SEMP 访问.

  • 要允许客户端为给定消息 VPN 在事件代理 SEMP 请求通过消息总线服务上运行传统 SEMP v1 命令,请输入以下 CONFIG 命令:
solace(configure/message-vpn/semp-msgbus)# no legacy-show-clear-cmds shutdown
  • 要阻止客户端为给定消息 VPN 在事件代理 SEMP 请求通过消息总线服务上运行传统 SEMP v1 命令,请输入以下 VPN CONFIG 命令:
solace(configure/message-vpn/semp-msgbus)# legacy-show-clear-cmds shutdown

SEMP v1分页

如果您通过 SEMP v1 检索多个对象(例如,队列、消息 VPN 或订阅),则必须使用 SEMP 分页(也称为“顺序获取”),并且您请求的对象数量不能超过 100.当使用 SEMP v1 请求通过消息总线服务时,您必须进一步限制对象数量,以确保您的响应适合最大响应大小 89,000 字节,当使用 SEMP v1 通过 HTTP 时,您的响应必须适合最大响应大小 33,554,432 字节.

如果 SEMP v1 show 命令需要分页,它支持“顺序获取”并提供 more-cookie 以通过多个较小的响应接收完整响应.

当 SEMP v1 请求会导致超大响应时,事件代理会以失败响应,reasonCode="431"reason="response too big"(或对于通过消息总线的 SEMP,limit-error 元素包含 " response too big: use sequenced get").当这种情况发生时,请参阅 SEMP v1 模式文件,以使用“顺序获取”参数创建您的发送请求.顺序获取参数包括 countnum-elements XML 属性.

如果命令支持分页,事件代理可能会在响应中包含 more-cookie.可以从 SEMP v1 响应中使用以下 XML XPath 获取 more-cookie//more-cookie. more-cookie 可以在另一个 SEMP v1 请求中发送回事件代理以接收响应的下一部分.重复此操作以从事件代理检索响应的所有部分.“顺序获取”和 more-cookie 的响应可以单独使用或重新组合成一个 SEMP v1 响应. more-cookie、单独的 SEMP v1 响应和整个响应(当重新组合时)都符合 SEMP v1 响应模式.

即使没有请求分页,show 命令也可能返回分页数据,特别是如果命令执行时间超过几秒.此外,当返回分页数据时,返回的条目数量可能少于请求的条目数量.在某些情况下,分页响应可能是完全空的(仅包含 more-cookie).客户端必须编写为接受任何小于或等于请求页面大小的分页数据.

如果这种行为阻止您的客户端正常工作,您可以使用 configure service semp legacy-timeout 命令来帮助在更新客户端以使用分页的同时保持系统运行.启用后,它增加了系统在客户端强制分页之前产生响应的时间量.请注意,这仅旨在在客户端更新为使用分页的短时间内保持系统运行.

当使用带有排序参数的 show 命令(例如,show client * sorted-stats total-client-messages-sent)时,使用“顺序获取”将返回顶部元素(最多为指定的元素数量),并且不会存在 more-cookie(尽管可能有更多元素).

可用的SEMP v1通过消息总线命令

以下命令可以通过消息总线执行:

  • Show 用户 EXEC 命令—这些命令使应用程序能够仅显示客户端连接到的消息 VPN 的配置和统计信息.例如,show client * 命令将仅显示客户端应用程序连接到的消息 VPN 中的客户端的配置和状态信息.

客户端应用程序不能显示其未连接到的消息 VPN 的信息,也不能显示系统级信息.

此限制的唯一例外是如果客户端应用程序连接到事件代理的管理消息 VPN.在这种情况下,它可以成功运行所有 show 命令(无论是涉及系统级信息还是消息 VPN 范围内的信息).

如果客户端执行系统级 show 命令,如 show hardwareshow version,并且它未连接到管理消息 VPN,则返回权限错误 "invalid request: not authorized to run this command".

要查看所有可能的 show 命令,请输入以下用户 EXEC 命令:

solace> show ?
  • 客户端管理 EXEC 命令—这些命令使应用程序能够清除和重置给定客户端的事件通知,用于指定的一次性事件.以下客户端管理 EXEC 命令可以通过消息总线执行:
    • admin client <name> message-vpn <vpn-name> [primary][backup] [static] clear-event <event-name>
  • 分布式缓存管理 EXEC 命令—这些命令使应用程序能够清除给定分布式缓存的事件通知或从给定分布式缓存中删除消息.这些命令还使应用程序能够启动没有启用自动启动模式的单个 PubSub+ 缓存实例或缓存集群中的所有 PubSub+ 缓存实例.以下分布式缓存管理 EXEC 命令可以通过消息总线执行:
    • admin distributed-cache <name> message-vpn <vpn-name> clear-event <event-name> [cache-cluster <cluster-name>] [cache-instance <instance-name>]
    • admin distributed-cache <name> message-vpn <vpn-name> delete-messages <topic> [cache-cluster <cluster-name>] [cache-instance <instance-name>]

有关这些命令的 Solace CLI 等效项和参数详细信息,请参阅执行 PubSub+ 缓存管理任务.

通过消息总线发布SEMP v1请求

客户端应用程序可以使用 Java、C 和 .NET 消息 API 通过消息总线发布 SEMP v1 请求.客户端应用程序必须将任何 SEMP v1 请求通过消息总线发布到以下主题目的地:

#SEMP/<router name>/<cmd-topic>

其中:

router name 是要发送请求的事件代理的主机名.

cmd-topic 是发布 SEMP v1 请求的特定命令主题目的地.可以使用以下命令主题:

  • #SEMP/<router name>/SHOWshow 用户 EXEC 命令的主题目的地,用于显示消息 VPN 范围内的信息,如配置数据、统计信息和客户端信息.

有关此命令的 Solace CLI 等效项的更多信息,请参阅监控 VPN 配置和统计信息.

  • #SEMP/<router name>/ADMIN/CLIENT—客户端管理 EXEC 命令的主题目的地,使应用程序能够清除和重置给定客户端的事件通知,用于指定的一次性事件.
  • #SEMP/<router name>/ADMIN/DISTRIBUTED-CACHE—分布式缓存管理 EXEC 命令的主题目的地,使应用程序能够清除给定分布式缓存的事件通知或从给定分布式缓存中删除消息.

以下是 SEMP v1 请求可能发布的完整命令主题示例:

  • #SEMP/SolaceNewYork/SHOW
  • #SEMP/SolaceLondon2/ADMIN/CLIENT
  • #SEMP/SolaceNewJersey/ADMIN/DISTRIBUTED-CACHE

在开发可以发布 SEMP v1 请求并处理其响应的客户端应用程序时,每个 SEMP v1 请求和每个 SEMP v1 响应必须适合单个消息.不支持多部分消息.

事件代理允许将一个消息 VPN 指定为管理消息 VPN.连接到此管理消息 VPN 的客户端然后可以请求系统级信息以及与事件代理上配置的任何消息 VPN 相关的信息.同样,连接到管理消息 VPN 的客户端可以为事件代理上配置的任何消息 VPN 运行管理命令.有关更多信息,请参阅指定管理消息 VPN.

有关如何通过消息总线发布 SEMP v1 请求的完整示例,为 JCSMP、C 和 .NET 的 PubSub+ 消息 API 提供了示例文件.示例目录顶部有一个 readme 文件,描述了如何构建和运行示例代码.

APISEMP v1 示例文件路径
JCSMPsamples/src/com/solacesystems/jcsmp/samples/introsamples/SempGetOverMB.java
samples/src/com/solacesystems/jcsmp/samples/introsamples/SempHttpSetRequest.java
samples/src/com/solacesystems/jcsmp/samples/introsamples/SempPagingRequests.java
Cex/sempGetOverMb.c
CCSMP (.NET)ex/SolClientSamples/SempGetOverMB.cs
ex/SolClientSamples/SempHttpSetRequest.cs
ex/SolClientSamples/SempPagingRequests.cs

使用JCSMP发布SEMP v1请求

要使用 JCSMP 发布 SEMP v1 请求,请执行以下步骤:

  1. 创建会话和生产者.
  2. 创建发布 SEMP v1 请求的消息主题:
Topic topic = JCSMPFactory.onlyInstance().createTopic(String topicString);

主题必须按以下方式构建:" #SEMP/<router name>/<cmd-topic>"

  1. 创建请求消息:
BytesXMLMessage requestMsg = _producer.createBytesXMLMessage();
  1. 将 SEMP v1 请求字符串设置为二进制附件:
requestMsg.writeAttachment(byte[] byteInputBuffer);
  1. 在会话上创建请求者,并发送请求.

SEMP v1 响应作为 BytesXMLMessage 返回:

Requestor requestor = _session.createRequestor();
BytesXMLMessage replyMsg = requestor.request(
requestMsg,
long timeoutMillis,
topic
);
  1. 从响应消息中获取二进制附件数据.二进制附件包含发布请求中命令主题的 SEMP v1 响应.
replyMsg.readAttachmentBytes(byte[] bytes);

有关 API 规范和更多详细信息,请参阅 PubSub+ 消息 API JCSMP 参考.

使用 C API发布SEMP v1请求

要使用 C API 发布 SEMP v1 请求,请执行以下步骤:

  1. 创建会话.
  2. 为请求分配消息.
if ( ( rc = solClient_msg_alloc ( &msg_p ) ) != SOLCLIENT_OK ) {
common_handleError ( rc, "solClient_msg_alloc()" );
return;
}
  1. 创建 SEMP v1 请求消息并指定发布 SEMP v1 请求的主题目的地.主题目的地必须按以下方式构建:
solClient_destination_t topic
topic.dest = topicString;
topic.destType = SOLCLIENT_TOPIC_DESTINATION;
  1. 创建请求消息并将其 Destination 设置为步骤 3 中创建的 topic
solClient_msg_setDestination ( msg_p, &topic );

将 SEMP v1 请求字符串设置为二进制附件:

solClient_msg_setBinaryAttachmentPtr
( msg_p, byteInputBuffer, strlen( byteInputBuffer ));
  1. 调用 solClient_session_sendRequest 方法:
solClient_opaqueMsg_pt replyMsg_p;
solClient_returnCode rc;
rc = solClient_session_sendRequest
( session_p, msg_p, &replyMsg_p );

SEMP v1 响应在回复消息中返回.

  1. 从回复消息中获取二进制附件数据:
solClient_msg_getBinaryAttachment
(reply Msg_p, byteOutputBuffer, sizeof ( byteOutput Buffer );

二进制附件包含发布请求中命令主题的 SEMP v1 响应.

有关 API 规范和更多详细信息,请参阅 PubSub+ 消息 API C 参考.

使用 .NET API 发布 SEMP v1 请求

要使用 .Net 消息 API 发布 SEMP v1 请求,请执行以下步骤:

  1. 创建会话.
  2. 创建消息主题.
"#SEMP/<router name>/<cmd-topic>"
ITopic topic =
ContextFactory.Instance.CreateTopic(topicString);
  1. 创建请求消息并将其 Destination 设置为步骤 2 中的 topic
IMessage requestMsg = ContextFactory.Instance.CreateMessage();
requestMsg.Destination = topic;
  1. 将 SEMP v1 请求字符串设置为二进制附件:
requestMsg.BinaryAttachment = byteInputBuffer;
  1. 在会话上调用 SendRequest() 方法:
IMessage replyMsg;
ReturnCode rc = session.SendRequest(requestMsg, out replyMsg, timeout);

SEMP v1 响应在 replyMsg 中返回.

  1. 从回复消息中获取二进制附件数据:
replyMsg.BinaryAttachment

二进制附件包含发布请求中命令主题的 SEMP v1 响应.

有关 API 规范和更多详细信息,请参阅 PubSub+ 消息 API .NET 参考.

通过消息总线接收SEMP v1响应

客户端应用程序可以像处理其他直接消息一样处理通过消息总线的 SEMP v1 响应——通过在创建会话时设置的消息接收接口(JCSMP 的 XMLMessageConsumer)、消息接收回调(C API)或委托(.NET API).

有关如何使用 PubSub+ 消息 API 接收消息的信息,请参阅接收直接消息.

生成Java SEMP v1 API

如果您想将 SEMP v1 集成到您的 Java 应用程序中,可以使用 Java Architecture for XML Binding (JAXB) 项目提供的工具来生成 Java SEMP v1 API.使用第三方工具,您可以从 SEMP v1 XML 模式创建一组 Java 类,这些类可以导入到 Java 应用程序中.有了这些 Java 类,您的 Java 应用程序可以创建面向对象的 SEMP v1 请求命令,并将 SEMP v1 响应分解为 Java 对象.

要将 SEMP v1 XML 请求和响应模式转换为 Java 类文件,在运行 JAXB 生成工具时必须指定随软件发布包提供的 SEMP v1 请求(semp-rpc-soltr-jaxb-bindings.xsd)和 SEMP v1 响应(semp-rpc-reply-soltr-jaxb-bindings.xsd)的 JAXB 绑定文件.

要生成 Java SEMP v1 API,请执行以下操作:

  1. 访问 https://jaxb.java.net/ 并下载 JAXB 的最新版本.
  2. 按照 JAXB 项目提供的说明正确安装工具集.
  3. 转换 SEMP v1 命令模式.

在 JAXB 转换工具中,输入以下命令:

xjc -p SolaceSempRequest semp-rpc-soltr.xsd -b semp-rpc-soltr-jaxb-bindings.xsd

工具将在当前目录中创建一个 SolaceSempRequest 目录.新目录包含表示 SEMP v1 请求命令的 Java 类文件.

  1. 转换 SEMP v1 响应模式.

在 JAXB 转换工具中,输入以下命令:

xjc -p SolaceSempReply semp-rpc-reply-soltr.xsd -b semp-rpc-reply-soltr-reply-jaxb-bindings.xsd

工具将在当前目录中创建一个 SolaceSempReply 目录.新目录将包含表示 SEMP v1 响应命令的 Java 类文件.

有关如何导入和使用 JAXB 生成的 API 的更多信息,请访问 https://jaxb.java.net.