Option to preserve publish order
Issue: SPR-13989
This commit is contained in:
@@ -208,18 +208,19 @@ public class MessageBrokerBeanDefinitionParserTests {
|
||||
assertEquals("my-selector", registry.getSelectorHeaderName());
|
||||
assertNotNull(brokerMessageHandler.getTaskScheduler());
|
||||
assertArrayEquals(new long[] {15000, 15000}, brokerMessageHandler.getHeartbeatValue());
|
||||
assertTrue(brokerMessageHandler.isPreservePublishOrder());
|
||||
|
||||
List<Class<? extends MessageHandler>> subscriberTypes =
|
||||
Arrays.<Class<? extends MessageHandler>>asList(SimpAnnotationMethodMessageHandler.class,
|
||||
Arrays.asList(SimpAnnotationMethodMessageHandler.class,
|
||||
UserDestinationMessageHandler.class, SimpleBrokerMessageHandler.class);
|
||||
testChannel("clientInboundChannel", subscriberTypes, 2);
|
||||
testExecutor("clientInboundChannel", Runtime.getRuntime().availableProcessors() * 2, Integer.MAX_VALUE, 60);
|
||||
|
||||
subscriberTypes = Collections.singletonList(SubProtocolWebSocketHandler.class);
|
||||
testChannel("clientOutboundChannel", subscriberTypes, 1);
|
||||
testChannel("clientOutboundChannel", subscriberTypes, 2);
|
||||
testExecutor("clientOutboundChannel", Runtime.getRuntime().availableProcessors() * 2, Integer.MAX_VALUE, 60);
|
||||
|
||||
subscriberTypes = Arrays.<Class<? extends MessageHandler>>asList(
|
||||
subscriberTypes = Arrays.asList(
|
||||
SimpleBrokerMessageHandler.class, UserDestinationMessageHandler.class);
|
||||
testChannel("brokerChannel", subscriberTypes, 1);
|
||||
try {
|
||||
@@ -278,6 +279,7 @@ public class MessageBrokerBeanDefinitionParserTests {
|
||||
assertEquals(5000, messageBroker.getSystemHeartbeatReceiveInterval());
|
||||
assertEquals(5000, messageBroker.getSystemHeartbeatSendInterval());
|
||||
assertThat(messageBroker.getDestinationPrefixes(), Matchers.containsInAnyOrder("/topic","/queue"));
|
||||
assertTrue(messageBroker.isPreservePublishOrder());
|
||||
|
||||
List<Class<? extends MessageHandler>> subscriberTypes = Arrays.asList(
|
||||
SimpAnnotationMethodMessageHandler.class, UserDestinationMessageHandler.class,
|
||||
@@ -286,7 +288,7 @@ public class MessageBrokerBeanDefinitionParserTests {
|
||||
testExecutor("clientInboundChannel", Runtime.getRuntime().availableProcessors() * 2, Integer.MAX_VALUE, 60);
|
||||
|
||||
subscriberTypes = Collections.singletonList(SubProtocolWebSocketHandler.class);
|
||||
testChannel("clientOutboundChannel", subscriberTypes, 1);
|
||||
testChannel("clientOutboundChannel", subscriberTypes, 2);
|
||||
testExecutor("clientOutboundChannel", Runtime.getRuntime().availableProcessors() * 2, Integer.MAX_VALUE, 60);
|
||||
|
||||
subscriberTypes = Arrays.asList(StompBrokerRelayMessageHandler.class, UserDestinationMessageHandler.class);
|
||||
|
||||
@@ -102,12 +102,13 @@ public class StompWebSocketIntegrationTests extends AbstractWebSocketIntegration
|
||||
|
||||
@Test
|
||||
public void sendMessageToControllerAndReceiveReplyViaTopic() throws Exception {
|
||||
TextMessage message1 = create(StompCommand.SUBSCRIBE)
|
||||
TextMessage m0 = create(StompCommand.CONNECT).headers("accept-version:1.1").build();
|
||||
TextMessage m1 = create(StompCommand.SUBSCRIBE)
|
||||
.headers("id:subs1", "destination:/topic/increment").build();
|
||||
TextMessage message2 = create(StompCommand.SEND)
|
||||
TextMessage m2 = create(StompCommand.SEND)
|
||||
.headers("destination:/app/increment").body("5").build();
|
||||
|
||||
TestClientWebSocketHandler clientHandler = new TestClientWebSocketHandler(1, message1, message2);
|
||||
TestClientWebSocketHandler clientHandler = new TestClientWebSocketHandler(2, m0, m1, m2);
|
||||
WebSocketSession session = doHandshake(clientHandler, "/ws").get();
|
||||
|
||||
try {
|
||||
@@ -120,16 +121,17 @@ public class StompWebSocketIntegrationTests extends AbstractWebSocketIntegration
|
||||
|
||||
@Test // SPR-10930
|
||||
public void sendMessageToBrokerAndReceiveReplyViaTopic() throws Exception {
|
||||
TextMessage m0 = create(StompCommand.CONNECT).headers("accept-version:1.1").build();
|
||||
TextMessage m1 = create(StompCommand.SUBSCRIBE).headers("id:subs1", "destination:/topic/foo").build();
|
||||
TextMessage m2 = create(StompCommand.SEND).headers("destination:/topic/foo").body("5").build();
|
||||
|
||||
TestClientWebSocketHandler clientHandler = new TestClientWebSocketHandler(1, m1, m2);
|
||||
TestClientWebSocketHandler clientHandler = new TestClientWebSocketHandler(2, m0, m1, m2);
|
||||
WebSocketSession session = doHandshake(clientHandler, "/ws").get();
|
||||
|
||||
try {
|
||||
assertTrue(clientHandler.latch.await(TIMEOUT, TimeUnit.SECONDS));
|
||||
|
||||
String payload = clientHandler.actual.get(0).getPayload();
|
||||
String payload = clientHandler.actual.get(1).getPayload();
|
||||
assertTrue("Expected STOMP MESSAGE, got " + payload, payload.startsWith("MESSAGE\n"));
|
||||
}
|
||||
finally {
|
||||
@@ -139,15 +141,16 @@ public class StompWebSocketIntegrationTests extends AbstractWebSocketIntegration
|
||||
|
||||
@Test // SPR-11648
|
||||
public void sendSubscribeToControllerAndReceiveReply() throws Exception {
|
||||
TextMessage m0 = create(StompCommand.CONNECT).headers("accept-version:1.1").build();
|
||||
String destHeader = "destination:/app/number";
|
||||
TextMessage message = create(StompCommand.SUBSCRIBE).headers("id:subs1", destHeader).build();
|
||||
TextMessage m1 = create(StompCommand.SUBSCRIBE).headers("id:subs1", destHeader).build();
|
||||
|
||||
TestClientWebSocketHandler clientHandler = new TestClientWebSocketHandler(1, message);
|
||||
TestClientWebSocketHandler clientHandler = new TestClientWebSocketHandler(2, m0, m1);
|
||||
WebSocketSession session = doHandshake(clientHandler, "/ws").get();
|
||||
|
||||
try {
|
||||
assertTrue(clientHandler.latch.await(TIMEOUT, TimeUnit.SECONDS));
|
||||
String payload = clientHandler.actual.get(0).getPayload();
|
||||
String payload = clientHandler.actual.get(1).getPayload();
|
||||
assertTrue("Expected STOMP destination=/app/number, got " + payload, payload.contains(destHeader));
|
||||
assertTrue("Expected STOMP Payload=42, got " + payload, payload.contains("42"));
|
||||
}
|
||||
@@ -159,15 +162,16 @@ public class StompWebSocketIntegrationTests extends AbstractWebSocketIntegration
|
||||
@Test
|
||||
public void handleExceptionAndSendToUser() throws Exception {
|
||||
String destHeader = "destination:/user/queue/error";
|
||||
TextMessage m0 = create(StompCommand.CONNECT).headers("accept-version:1.1").build();
|
||||
TextMessage m1 = create(StompCommand.SUBSCRIBE).headers("id:subs1", destHeader).build();
|
||||
TextMessage m2 = create(StompCommand.SEND).headers("destination:/app/exception").build();
|
||||
|
||||
TestClientWebSocketHandler clientHandler = new TestClientWebSocketHandler(1, m1, m2);
|
||||
TestClientWebSocketHandler clientHandler = new TestClientWebSocketHandler(2, m0, m1, m2);
|
||||
WebSocketSession session = doHandshake(clientHandler, "/ws").get();
|
||||
|
||||
try {
|
||||
assertTrue(clientHandler.latch.await(TIMEOUT, TimeUnit.SECONDS));
|
||||
String payload = clientHandler.actual.get(0).getPayload();
|
||||
String payload = clientHandler.actual.get(1).getPayload();
|
||||
assertTrue(payload.startsWith("MESSAGE\n"));
|
||||
assertTrue(payload.contains("destination:/user/queue/error\n"));
|
||||
assertTrue(payload.endsWith("Got error: Bad input\0"));
|
||||
@@ -179,17 +183,18 @@ public class StompWebSocketIntegrationTests extends AbstractWebSocketIntegration
|
||||
|
||||
@Test
|
||||
public void webSocketScope() throws Exception {
|
||||
TextMessage message1 = create(StompCommand.SUBSCRIBE)
|
||||
TextMessage m0 = create(StompCommand.CONNECT).headers("accept-version:1.1").build();
|
||||
TextMessage m1 = create(StompCommand.SUBSCRIBE)
|
||||
.headers("id:subs1", "destination:/topic/scopedBeanValue").build();
|
||||
TextMessage message2 = create(StompCommand.SEND)
|
||||
TextMessage m2 = create(StompCommand.SEND)
|
||||
.headers("destination:/app/scopedBeanValue").build();
|
||||
|
||||
TestClientWebSocketHandler clientHandler = new TestClientWebSocketHandler(1, message1, message2);
|
||||
TestClientWebSocketHandler clientHandler = new TestClientWebSocketHandler(2, m0, m1, m2);
|
||||
WebSocketSession session = doHandshake(clientHandler, "/ws").get();
|
||||
|
||||
try {
|
||||
assertTrue(clientHandler.latch.await(TIMEOUT, TimeUnit.SECONDS));
|
||||
String payload = clientHandler.actual.get(0).getPayload();
|
||||
String payload = clientHandler.actual.get(1).getPayload();
|
||||
assertTrue(payload.startsWith("MESSAGE\n"));
|
||||
assertTrue(payload.contains("destination:/topic/scopedBeanValue\n"));
|
||||
assertTrue(payload.endsWith("55\0"));
|
||||
|
||||
Reference in New Issue
Block a user