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);
|
long[] heartbeat = (long[]) connectAckHeaders.getHeader(SimpMessageHeaderAccessor.HEART_BEAT_HEADER);
|
||||||
if (heartbeat != null) {
|
if (heartbeat != null) {
|
||||||
connectedHeaders.setHeartbeat(heartbeat[0], heartbeat[1]);
|
connectedHeaders.setHeartbeat(heartbeat[0], heartbeat[1]);
|
||||||
|
} else {
|
||||||
|
connectedHeaders.setHeartbeat(0, 0);
|
||||||
}
|
}
|
||||||
return connectedHeaders;
|
return connectedHeaders;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -150,6 +150,25 @@ public class StompSubProtocolHandlerTests {
|
||||||
"user-name:joe\n" + "\n" + "\u0000", actual.getPayload());
|
"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
|
@Test
|
||||||
public void handleMessageToClientWithSimpHeartbeat() {
|
public void handleMessageToClientWithSimpHeartbeat() {
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue