You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 02:26:18