Affects:
org.springframework.boot:spring-boot-starter-websocket:jar:2.3.1.RELEASE org.springframework:spring-messaging:jar:5.2.7.RELEASE org.springframework:spring-websocket:jar:5.2.7.RELEASE
Getting exception
Exception in thread "clientInboundChannel-4" org.springframework.messaging.MessageDeliveryException: Failed to handle GenericMessage [payload=byte[0], headers={simpMessageType=MESSAGE, stompCommand=SEND, nativeHeaders={destination=[/queue/test]}, simpSessionAttributes={}, simpHeartbeat=[J@3e20fadf, opentracing.span=5dbdcde08b48bc8d:5dbdcde08b48bc8d:0:0 - /queue/test, id=367590c7-69c9-62ad-514f-14219165de8a, simpSessionId=22add5ae-a93c-bb44-bf2a-04b7529c73df, simpDestination=/queue/test, timestamp=1598333820847}] to org.springframework.messaging.support.ExecutorSubscribableChannel$SendTask@61891fa8 in StompBrokerRelay[ReactorNettyTcpClient[reactor.netty.tcp.TcpClientDoOn@3daf0663]]; nested exception is java.lang.IllegalStateException: No header accessor (not using the SimpMessagingTemplate?): GenericMessage [payload=byte[0], headers={simpMessageType=MESSAGE, stompCommand=SEND, nativeHeaders={destination=[/queue/test]}, simpSessionAttributes={}, simpHeartbeat=[J@3e20fadf, opentracing.span=5dbdcde08b48bc8d:5dbdcde08b48bc8d:0:0 - /queue/test, id=367590c7-69c9-62ad-514f-14219165de8a, simpSessionId=22add5ae-a93c-bb44-bf2a-04b7529c73df, simpDestination=/queue/test, timestamp=1598333820847}], failedMessage=GenericMessage [payload=byte[0], headers={simpMessageType=MESSAGE, stompCommand=SEND, nativeHeaders={destination=[/queue/test]}, simpSessionAttributes={}, simpHeartbeat=[J@3e20fadf, opentracing.span=5dbdcde08b48bc8d:5dbdcde08b48bc8d:0:0 - /queue/test, id=367590c7-69c9-62ad-514f-14219165de8a, simpSessionId=22add5ae-a93c-bb44-bf2a-04b7529c73df, simpDestination=/queue/test, timestamp=1598333820847}]
at org.springframework.messaging.support.ExecutorSubscribableChannel$SendTask.run(ExecutorSubscribableChannel.java:153)
at io.opentracing.contrib.concurrent.TracedRunnable.run(TracedRunnable.java:30)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.IllegalStateException: No header accessor (not using the SimpMessagingTemplate?): GenericMessage [payload=byte[0], headers={simpMessageType=MESSAGE, stompCommand=SEND, nativeHeaders={destination=[/queue/test]}, simpSessionAttributes={}, simpHeartbeat=[J@3e20fadf, opentracing.span=5dbdcde08b48bc8d:5dbdcde08b48bc8d:0:0 - /queue/test, id=367590c7-69c9-62ad-514f-14219165de8a, simpSessionId=22add5ae-a93c-bb44-bf2a-04b7529c73df, simpDestination=/queue/test, timestamp=1598333820847}]
at org.springframework.messaging.simp.stomp.StompBrokerRelayMessageHandler.handleMessageInternal(StompBrokerRelayMessageHandler.java:499)
at org.springframework.messaging.simp.broker.AbstractBrokerMessageHandler.handleMessage(AbstractBrokerMessageHandler.java:256)
at org.springframework.messaging.support.ExecutorSubscribableChannel$SendTask.run(ExecutorSubscribableChannel.java:144)
... 4 more
stomp configured with
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
String rabbitMqHost = Environment.getProperty("rabbitmq.host", "localhost");
int rabbitMqPort = Environment.getIntProperty("rabbitmq.port", 61613);
String rabbitMqUsername = Environment.getProperty("rabbitmq.username", "guest");
String rabbitMqPassword = Environment.getProperty("rabbitmq.password", "guest");
config.setUserDestinationPrefix("/user")
.setApplicationDestinationPrefixes("/app", "/user")
.enableStompBrokerRelay("/topic", "/queue", "/temp-queue/")
.setRelayHost(rabbitMqHost)
.setRelayPort(rabbitMqPort)
.setClientLogin(rabbitMqUsername)
.setClientPasscode(rabbitMqPassword);
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry
.addEndpoint("/stomp")
.setAllowedOrigins("*");
}
}
Client code
const { Client } = require("@stomp/stompjs");
let client = new Client({
webSocketFactory: () => new WebSocket(`wss://server-address/stomp`),
debug: (msg) => {
console.log(new Date(), msg);
}
});
client.onConnect = () => {
client.publish({
destination: "/queue/test",
headers: {}
});
};
client.activate();
Comment From: cameronbraid
Found the cause https://github.com/opentracing-contrib/java-spring-cloud/issues/301