如何在JMeter中建立STOMP连接并解决消息发送无响应问题?
排查Spring Boot STOMP WebSocket的SEND请求未送达问题
我们计划使用JMeter对基于Spring Boot(STOMP)的WebSocket应用开展压测,已成功建立CONNECT、SUBSCRIBE连接,但SEND端点的请求既未送达服务器,也无任何错误提示;Postman执行相同操作也未收到响应。应用的STOMP报文示例如下:
CONNECT帧
CONNECT accept-version:1.2,1.1,1.0 heart-beat:10000,10000 ^@
SUBSCRIBE帧
SUBSCRIBE id:sub-001 destination:/user/aa/queue/notify ^@
SEND帧
SEND destination:/app/register content-length:1232 {"transactionId":"arr2f6c7-a7d3-45a3-aeb5-baacf4d742cea2","sessionId":"aa","functionId":"fdsfd" } ^@
以下是针对性的排查步骤:
1. 严格校验SEND帧的格式
STOMP协议对帧格式要求苛刻,格式错误会导致服务器直接丢弃请求且无反馈:
- content-length必须精确匹配:示例中写的1232要和实际JSON内容的字节数完全一致(注意是字节数,UTF-8编码下中文占3字节)。用工具计算JSON实际字节长度后替换该值。
- 必须以NULL字符结尾:STOMP帧的结束标志是
\0(即示例中的^@),JMeter或Postman中未正确添加该字符时,服务器会一直等待帧结束,导致请求无响应。 - destination路径匹配:确认
/app/register和服务器端@MessageMapping注解的路径完全一致,包括前缀、大小写。
2. 开启服务器端DEBUG日志排查
在Spring Boot配置文件中添加日志配置,查看服务器是否接收到SEND帧及处理细节:
logging: level: org.springframework.messaging: DEBUG org.springframework.web.socket: DEBUG
查看日志中是否有SEND相关的处理记录,是否存在参数校验失败、权限拦截、消息转换异常等情况。
3. 检查JMeter的WebSocket配置
如果使用JMeter的WebSocket Sampler:
- 确保SEND请求关联了之前成功建立的CONNECT连接(在Sampler的"Connection"下拉框选择对应连接)。
- 帧类型选择
STOMP,正确填写headers(destination、content-length)。 - 消息体末尾必须添加
\0,可直接输入转义字符,或用JMeter函数${__char(0,)}生成NULL字符。 - 用Sequential Controller保证CONNECT→SUBSCRIBE→SEND的执行顺序,避免SEND在连接建立前执行。
4. 用原生STOMP客户端验证
用wscat命令行工具测试,排除JMeter/Postman的工具问题:
# 先安装wscat:npm install -g wscat wscat -c ws://你的服务器地址/websocket端点路径 # 连接后依次发送以下帧,每帧结尾手动输入^@(即Ctrl+@) CONNECT accept-version:1.2,1.1,1.0 heart-beat:10000,10000 ^@ SUBSCRIBE id:sub-001 destination:/user/aa/queue/notify ^@ SEND destination:/app/register content-length:实际JSON字节长度 {"transactionId":"arr2f6c7-a7d3-45a3-aeb5-baacf4d742cea2","sessionId":"aa","functionId":"fdsfd" } ^@
如果wscat能成功收到响应,说明是JMeter/Postman的配置问题;如果也失败,聚焦服务器端代码排查。
5. 服务器端代码与配置排查
- 确认
@MessageMapping("/app/register")方法定义正确,参数是否用@Payload注解接收JSON,是否配置了正确的Jackson消息转换器。 - 检查是否存在
ChannelInterceptor或其他拦截器,是否拦截了SEND请求并丢弃。 - 若应用需要认证,确认CONNECT帧是否携带了正确的认证信息(比如token),服务器端是否配置了对应的认证拦截器。
内容的提问来源于stack exchange,提问作者dock vision
相关产品推荐
相关产品推荐

