跳到主要内容

SDKPerf示例命令

以下是带有简要测试描述的 SDKPerf 命令行示例。本节的目标是通过示例使您更容易确定如何构建自己的 SDKPerf 命令行。所有示例都假设以下内容:

  • 您希望连接到名为 default 的消息 VPN。
  • 在该消息 VPN 中禁用了身份验证。
  • 在您的消息 VPN 中启用了名为 default 的客户端用户名。

默认情况下,Solace PubSub+ 软件事件代理满足这些要求。

在所有这些命令中,将 <HOST> 替换为您的 Solace PubSub+ 事件代理的主机或 IP。以下示例倾向于使用 sdkperf_java,但命令行选项将与 SDKPerf 的其他版本同等适用,如“适用性”注释中所述。

使用直接消息进行发布/订阅

在主题 T/a 上以 1 条消息/秒的速率发送和接收 5 条大小为 100 字节的消息:

sdkperf_java -cip=HOST -ptl=T/a -stl=T/a -msa=100 -mn=5 -mr=1

对于 Solace REST 消息传递,概念类似,只是订阅主题是在 REST 交付点队列上配置的。有关此功能所需的 Solace PubSub+ 事件代理配置的详细信息,请参阅“工具依赖项”。在 Solace REST 消息传递中,将主题 T/a 添加到 REST 交付点队列中,并让 REST 消费者连接到端口 8081,然后命令如下:

sdkperf_rest -cip=HOST -spl=8081 -ptl=T/a -mt=persistent -msa=100 -mn=1 -mr=1

适用性

  • 所有 SDKPerf 版本均支持

使用保证消息进行点对点通信

假设存在一个名为 Q/demo 的持久队列,绑定到此队列,发送一条 100 字节的持久消息,并接收它。

sdkperf_java -cip=HOST -pql=Q/demo -sql=Q/demo -mt=persistent -msa=100 -mn=1 -mr=1

对于 REST,概念类似,但 REST 交付点队列是一个预配置的队列。因此,请确保 –pql 参数是 REST 交付点队列的名称。

sdkperf_rest -cip=HOST -spl=8081 -pql=Q/rdp -mt=persistent -msa=100 -mn=1 -mr=1

适用性

  • SDKPerf C#、JCSMP、JMS、REST 支持
  • SDKPerf JavaScript、MQTT 不支持

使用保证消息进行发布/订阅

通常,Solace API 通过使用映射到队列的主题订阅或使用主题端点来支持发布/订阅。此示例使用临时主题端点。

sdkperf_java -cip=HOST -ptl=T/demo -stl=T/demo -mt=persistent –tte=1 -msa=100 -mn=1 -mr=1

对于 MQTT,概念相同,但表达保证消息的方式发生了变化。不是使用 -mt-tte,而是使用 -mpq-msq 来指定消息的 MQTT QoS。

sdkperf_mqtt -cip=HOST -ptl=T/demo -stl=T/demo -mpq=1 -msq=1 -msa=100 -mn=1 -mr=1

对于 Solace REST 消息传递,概念再次类似,只是主题订阅是在 REST 交付点队列上配置的。因此,命令如下:

sdkperf_rest -cip=HOST -spl=8081 -ptl=T/demo -mt=persistent -msa=100 -mn=1 -mr=1

适用性

  • SDKPerf C、C#、Java、JMS、MQTT 支持
  • SDKPerf JavaScript 不支持

预配队列并映射主题

通过 -pe 预配一个队列,然后将两个主题订阅映射到此队列。最后,向主题发布 100 条持久消息以验证消息流。工具在执行结束时还会清理预配的队列。

sdkperf_java -cip=HOST -pe -sql=queue -stl=a,b -ptl=a,b -mt=persistent -mn=100 -mr=100 -msa=100

适用性

  • SDKPerf C、C#、JCSMP 支持
  • SDKPerf JavaScript、JMS、MQTT、REST 不支持

使用始终投递标志进行订阅

使用始终投递标志订阅主题 T/a。在测试发布到一个(-pto)时很有用。

sdkperf_java -cip=HOST -stl="T/a<TOPIC_END/>DA=1"

适用性

  • SDKPerf C、C#、JCSMP、JavaScript 支持
  • SDKPerf JMS、REST、MQTT 不支持

发布带有TTL和DMQ合格的持久消息

向队列发布一条带有 1000 毫秒生存时间的消息,并将消息标记为 DMQ 合格。

sdkperf_java -cip=HOST -pql=queue -mt=persistent -mn=1 -mr=1 -msa=100 -mtl=1000 –mdq

适用性

  • SDKPerf C、C#、Java、JMS、REST 支持
  • SDKPerf JavaScript、MQTT 不支持

使用选择器和结构化数据发布/订阅持久消息

向队列发布一条包含结构化数据的持久消息。

sdkperf_c -cip=HOST -pql=queue -mt=persistent -mn=1 -mr=1 –sdm=sdm1.txt

其中 sdm1.txt 的内容为:

msg: type=map
msg: useBinaryAttachment=0
bool name=a value=0
uint16 name=b value=3
int16 name=c value=4
uint32 name=d value=5
int32 name=e value=6
uint64 name=f value=7
int64 name=g value=8
string name=h value=matchTopic
float name=i value=1.2345678
double name=j value=2.3456789

-sdm 参数的适用性,如上例所示:

  • SDKPerf C 支持
  • SDKPerf C#、Java、JMS、JavaScript、REST、MQTT 不支持

使用选择器订阅队列,以仅允许匹配特定标准的消息:

sdkperf_java -cip=HOST -sql=queue –ssl="c>2 AND h='matchTopic'"

-ssl 参数添加选择器的适用性:

  • SDKPerf C、C#、JCSMP、JMS 支持
  • SDKPerf JavaScript、REST、MQTT 不支持

高级测试命令

以下是用于高级测试的 SDKPerf 命令行示例。

测量延迟

SDKPerf 中有多个选项可以控制延迟测量。有关选项列表,请参阅“性能和延迟测量”。以下是一个简单的示例,启用延迟测量并将预热时间设置为一秒。

sdkperf_java -cip=HOST -ptl=T/a -stl=T/a -mn=5 -msa=100 -mr=1 -l -lwu=1

添加此选项后,您将获得额外的输出,类似于以下内容:

延迟信息:
延迟信息:
单个延迟桶大小 = 1.0 微秒
延迟预热 = 1.0s
延迟消息接收 = 1000000
延迟消息速率 (消息/秒) = 10000

延迟统计信息:
订阅的最小延迟 = 27
订阅的平均延迟 = 34
50% 延迟百分位数 = 35
95% 延迟百分位数 = 39
99% 延迟百分位数 = 39
99.9% 延迟百分位数 = 40
订阅的最大延迟 = 41
标准差 = 2.3

检查消息顺序

SDKPerf 可以通过在每条发送的消息中嵌入唯一 ID 来检查所有发送和接收的消息的顺序。这可以通过 -oc 选项启用。

sdkperf_java -cip=HOST -
ptl=T/a -stl=T/a -mn=5 -msa=100 -mr=1 -oc

启用顺序检查时,SDKPerf 将打印额外的统计信息,类似于以下内容,总结顺序检查:

消息顺序检查摘要:
总共检查的消息顺序 : 5
总共顺序错误的消息 : 0
总共丢失的消息 : 0
总共重复的消息 : 0
总共重新投递的消息 : 0
总共重新投递的重复消息 : 0
总共重新发布的重复消息 : 0

检查消息完整性

SDKPerf 可以通过在传输的消息中嵌入 CRC 哈希来检查所有发送和接收的消息内容的完整性。这可以通过 -crc 选项启用。

sdkperf_java -cip=HOST -ptl=T/a -stl=T/a -mn=5 -msa=100 -mr=1 -crc

启用完整性检查时,SDKPerf 将打印额外的统计信息,类似于以下内容,总结结果:

消息完整性检查:
总消息正常 = 5
总消息错误 = 0
XML 负载正常 = 0
XML 负载错误 = 0
附件正常 = 5
附件错误 = 0
用户数据正常 = 0
用户数据错误 = 0
结构化数据正常 = 0
结构化数据错误 = 0