Always set heart-beat header in STOMP CONNECTED frames
Since SPR-10954, the SimpleBrokerMessageHandler supports `heart-beats`. Even if the STOMP spec states that the `heart-beat` header is OPTIONAL, and if absent considered as `heart-beat: 0,0`, some clients rely on this to be set in CONNECTED frames. This commit adds this header information even if no task scheduler/heart-beat have been configured. See: https://stomp.github.io/stomp-specification-1.2.html#Heart-beating Issue: SPR-10954
This commit is contained in:
parent
76faa2c6d2
commit
4b07bc39da
|
|
@ -449,6 +449,8 @@ public class StompSubProtocolHandler implements SubProtocolHandler, ApplicationE
|
|||
long[] heartbeat = (long[]) connectAckHeaders.getHeader(SimpMessageHeaderAccessor.HEART_BEAT_HEADER);
|
||||
if (heartbeat != null) {
|
||||
connectedHeaders.setHeartbeat(heartbeat[0], heartbeat[1]);
|
||||
} else {
|
||||
connectedHeaders.setHeartbeat(0, 0);
|
||||
}
|
||||
return connectedHeaders;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -150,6 +150,25 @@ public class StompSubProtocolHandlerTests {
|
|||
"user-name:joe\n" + "\n" + "\u0000", actual.getPayload());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void handleMessageToClientWithSimpConnectAckDefaultHeartBeat() {
|
||||
|
||||
StompHeaderAccessor accessor = StompHeaderAccessor.create(StompCommand.CONNECT);
|
||||
accessor.setHeartbeat(10000, 10000);
|
||||
accessor.setAcceptVersion("1.0,1.1");
|
||||
Message<?> connectMessage = MessageBuilder.createMessage(EMPTY_PAYLOAD, accessor.getMessageHeaders());
|
||||
|
||||
SimpMessageHeaderAccessor ackAccessor = SimpMessageHeaderAccessor.create(SimpMessageType.CONNECT_ACK);
|
||||
ackAccessor.setHeader(SimpMessageHeaderAccessor.CONNECT_MESSAGE_HEADER, connectMessage);
|
||||
Message<byte[]> ackMessage = MessageBuilder.createMessage(EMPTY_PAYLOAD, ackAccessor.getMessageHeaders());
|
||||
this.protocolHandler.handleMessageToClient(this.session, ackMessage);
|
||||
|
||||
assertEquals(1, this.session.getSentMessages().size());
|
||||
TextMessage actual = (TextMessage) this.session.getSentMessages().get(0);
|
||||
assertEquals("CONNECTED\n" + "version:1.1\n" + "heart-beat:0,0\n" +
|
||||
"user-name:joe\n" + "\n" + "\u0000", actual.getPayload());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void handleMessageToClientWithSimpHeartbeat() {
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue