projectodd/stilts

A single websocket message containing multiple STOMP frames

Opened this issue · 0 comments

If the stilts stomp-client receives a single websocket message that contains two or more STOMP frames, then only the first of those frames is processed. This means that frames are silently lost. I've seen this against a ActiveMQ Apollo broker (simply fire two messages to a destination to which you've subscribed in quick succession; only the first will arrive) - it could no doubt occur against other brokers, too.

See also http://jmesnil.net/weblog/2012/05/15/stomp-over-websockets-with-multi-frames/

Below is an extract from the log file ...

TRACE 2014-07-14 08:59:54,513 [DebugHandler] - CLIENT_HEAD <<inbound<< [id: 0xcdde5cbd, /127.0.0.1:55694 => /127.0.0.1:8090] :: MESSAGE+BUFFER ?~�$MESSAGE
subscription:subscription-0
message-id:localhost-21
receipt:receipt-0
destination:/topic/SOME_TOPIC
content-length:17

any old content 0^@
MESSAGE
subscription:subscription-0
message-id:localhost-22
receipt:receipt-1
destination:/topic/SOME_TOPIC
content-length:17

any old content 1^@

TRACE 2014-07-14 08:59:54,514 [DebugHandler] - CLIENT_TAIL <<inbound<< [id: 0x3e06ea70, /127.0.0.1:55701 => /127.0.0.1:8090] :: [id: 0x3e06ea70, /127.0.0.1:55701 => /127.0.0.1:8090] RECEIVED: [StompControlFrame: header=[FrameHeader: command=RECEIPT; headers={receipt-id=receipt-0}]] ** class org.jboss.netty.channel.UpstreamMessageEvent
TRACE 2014-07-14 08:59:54,514 [DebugHandler] - CLIENT_TAIL <<inbound<< [id: 0x3e06ea70, /127.0.0.1:55701 => /127.0.0.1:8090] :: MESSAGE [StompControlFrame: header=[FrameHeader: command=RECEIPT; headers={receipt-id=receipt-0}]]
TRACE 2014-07-14 08:59:54,517 [DebugHandler] - CLIENT_MID <<inbound<< [id: 0xcdde5cbd, /127.0.0.1:55694 => /127.0.0.1:8090] :: [id: 0xcdde5cbd, /127.0.0.1:55694 => /127.0.0.1:8090] RECEIVED: [StompContentFrame: header=[FrameHeader: command=MESSAGE; headers={subscription=subscription-0, content-length=17, message-id=localhost-21, receipt=receipt-0, destination=/topic/SOME_TOPIC}]] ** class org.jboss.netty.channel.UpstreamMessageEvent
TRACE 2014-07-14 08:59:54,517 [DebugHandler] - CLIENT_MID <<inbound<< [id: 0xcdde5cbd, /127.0.0.1:55694 => /127.0.0.1:8090] :: MESSAGE [StompContentFrame: header=[FrameHeader: command=MESSAGE; headers={subscription=subscription-0, content-length=17, message-id=localhost-21, receipt=receipt-0, destination=/topic/SOME_TOPIC}]]
TRACE 2014-07-14 08:59:54,518 [AbstractClientControlFrameHandler] - received: [StompContentFrame: header=[FrameHeader: command=MESSAGE; headers={subscription=subscription-0, content-length=17, message-id=localhost-21, receipt=receipt-0, destination=/topic/SOME_TOPIC}]]
TRACE 2014-07-14 08:59:54,526 [DebugHandler] - CLIENT_TAIL <<inbound<< [id: 0xcdde5cbd, /127.0.0.1:55694 => /127.0.0.1:8090] :: [id: 0xcdde5cbd, /127.0.0.1:55694 => /127.0.0.1:8090] RECEIVED: [StompMessage: headers={subscription=subscription-0, content-length=17, message-id=localhost-21, receipt=receipt-0, destination=/topic/SOME_TOPIC}   content=any old content 0] ** class org.jboss.netty.channel.UpstreamMessageEvent
TRACE 2014-07-14 08:59:54,526 [DebugHandler] - CLIENT_TAIL <<inbound<< [id: 0xcdde5cbd, /127.0.0.1:55694 => /127.0.0.1:8090] :: MESSAGE [StompMessage: headers={subscription=subscription-0, content-length=17, message-id=localhost-21, receipt=receipt-0, destination=/topic/SOME_TOPIC}