如何通过JMeter发送Stomp帧?ActiveMQ Artemis压测问题求助
针对ActiveMQ Artemis STOMP端口的负载测试采样器选择
可用的采样器选项
1. TCP采样器(适用,但需正确构造STOMP帧)
TCP采样器可以用来发送STOMP消息,因为STOMP本身是基于TCP的文本协议。但你的当前配置存在问题,导致读取错误:
- 错误提示
ReadException: Error reading from server, bytes read: 0通常意味着JMeter未收到代理响应,可能是STOMP帧格式不正确,或TCP采样器的结束符配置有误。 - STOMP帧的结束符是空字节(^@,即ASCII 0),需在TCP采样器的「Advanced」标签中将
eolByte设置为0,否则JMeter无法正确识别帧结束,导致等待超时。 - 另外,
SEND帧不需要version和session头,这些是CONNECT帧的专属内容,SEND帧仅需保留destination头即可。
修正后的STOMP帧示例:
CONNECT accept-version:1.0,1.1,1.2 host:127.0.0.1 login:<你的用户名> passcode:<你的密码> ^@
SEND destination:/queue/test {<data>} ^@
2. JMS Publisher采样器(可行,需正确配置StompJMS)
可以使用JMS Publisher采样器配合org.fusesource.stomp.jms.StompJmsInitialContextFactory,步骤如下:
- 添加依赖:将
stompjms-client的JAR包放入JMeter的lib目录,重启JMeter。 - 配置JMS Publisher:
- 初始上下文工厂:
org.fusesource.stomp.jms.StompJmsInitialContextFactory - 提供URL:
tcp://127.0.0.1:61623 - 用户名/密码:填写你的Artemis认证信息
- 目标:
/queue/test - 连接工厂:
ConnectionFactory(StompJMS默认连接工厂名称)
- 初始上下文工厂:
- 注意:若Artemis启用严格STOMP认证,需确认是否需额外配置
client-id等参数。
排查当前TCP采样器失败的关键点
- 查看Artemis日志,确认是否收到CONNECT/SEND帧,是否存在认证或格式错误。
- 开启TCP采样器的「Re-use connection」选项,避免每次采样重新建立连接(STOMP为长连接协议)。
- 验证STOMP帧换行符:必须使用
\n(LF),部分代理对\r\n(CRLF)换行符敏感。
内容的提问来源于stack exchange,提问作者Cat
相关产品推荐
相关产品推荐

