Spring Boot Stomp-Transaction Sockjs: ERROR message=[Bad transaction] Invalid transaction identifier

Posted

技术标签:

【中文标题】Spring Boot Stomp-Transaction Sockjs: ERROR message=[Bad transaction] Invalid transaction identifier【英文标题】: 【发布时间】:2021-11-09 11:15:30 【问题描述】:

我使用 Spring Boot 为 Rabbitmq 实现了 RelayMessageBroker,并按预期工作。我通过 SockJS 使用 javascript-Client 来订阅队列并接收/发送消息。

我只是在尝试使用 stomp 事务时遇到问题。

我的 JS 代码:

          var tx = clientRef.client.begin();
          clientRef.client.send("/queue/onnext", 
                                transaction: tx.id,
                                durable:false,
                                exclusive:false,
                                "auto-delete":false
                                , 'test123');
          tx.commit()

Spring 关闭连接并报错:

o.s.m.s.s.StompBrokerRelayMessageHandler : Received ERROR message=[Bad transaction], content-type=[text/plain], version=[1.0,1.1,1.2], content-length=[39] session=wajdofjf, user=test text/plain payload=Invalid transaction identifier: "tx-1"

【问题讨论】:

【参考方案1】:

我自己找到了解决方案: sockjs 尝试通过连接

["CONNECT\naccept-version:1.1,1.0\nheart-beat:10000,10000\n\n\u0000"] -> stomp version 1.1.

我将其更改为 1.2 版,问题不再出现。

【讨论】:

以上是关于Spring Boot Stomp-Transaction Sockjs: ERROR message=[Bad transaction] Invalid transaction identifier的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Spring Boot 应用程序 pom 同时需要 spring-boot-starter-parent 和 spring-boot-starter-web?

《02.Spring Boot连载:Spring Boot实战.Spring Boot核心原理剖析》

spring-boot-quartz, 依赖spring-boot-parent

spring-boot系列:初试spring-boot

Spring Boot:Spring Boot启动原理分析

Spring Boot:Spring Boot启动原理分析