Search in sources :

Example 1 with UserRegistryMessageHandler

use of org.springframework.messaging.simp.user.UserRegistryMessageHandler in project spring-framework by spring-projects.

the class AbstractMessageBrokerConfiguration method stompBrokerRelayMessageHandler.

@Bean
public AbstractBrokerMessageHandler stompBrokerRelayMessageHandler() {
    StompBrokerRelayMessageHandler handler = getBrokerRegistry().getStompBrokerRelay(brokerChannel());
    if (handler == null) {
        return new NoOpBrokerMessageHandler();
    }
    Map<String, MessageHandler> subscriptions = new HashMap<>(1);
    String destination = getBrokerRegistry().getUserDestinationBroadcast();
    if (destination != null) {
        subscriptions.put(destination, userDestinationMessageHandler());
    }
    destination = getBrokerRegistry().getUserRegistryBroadcast();
    if (destination != null) {
        subscriptions.put(destination, userRegistryMessageHandler());
    }
    handler.setSystemSubscriptions(subscriptions);
    return handler;
}
Also used : SimpleBrokerMessageHandler(org.springframework.messaging.simp.broker.SimpleBrokerMessageHandler) StompBrokerRelayMessageHandler(org.springframework.messaging.simp.stomp.StompBrokerRelayMessageHandler) AbstractBrokerMessageHandler(org.springframework.messaging.simp.broker.AbstractBrokerMessageHandler) UserRegistryMessageHandler(org.springframework.messaging.simp.user.UserRegistryMessageHandler) UserDestinationMessageHandler(org.springframework.messaging.simp.user.UserDestinationMessageHandler) MessageHandler(org.springframework.messaging.MessageHandler) SimpAnnotationMethodMessageHandler(org.springframework.messaging.simp.annotation.support.SimpAnnotationMethodMessageHandler) HashMap(java.util.HashMap) StompBrokerRelayMessageHandler(org.springframework.messaging.simp.stomp.StompBrokerRelayMessageHandler) Bean(org.springframework.context.annotation.Bean)

Example 2 with UserRegistryMessageHandler

use of org.springframework.messaging.simp.user.UserRegistryMessageHandler in project spring-framework by spring-projects.

the class AbstractMessageBrokerConfiguration method userRegistryMessageHandler.

@Bean
public MessageHandler userRegistryMessageHandler() {
    if (getBrokerRegistry().getUserRegistryBroadcast() == null) {
        return new NoOpMessageHandler();
    }
    SimpUserRegistry userRegistry = userRegistry();
    Assert.isInstanceOf(MultiServerUserRegistry.class, userRegistry, "MultiServerUserRegistry required");
    return new UserRegistryMessageHandler((MultiServerUserRegistry) userRegistry, brokerMessagingTemplate(), getBrokerRegistry().getUserRegistryBroadcast(), messageBrokerTaskScheduler());
}
Also used : UserRegistryMessageHandler(org.springframework.messaging.simp.user.UserRegistryMessageHandler) SimpUserRegistry(org.springframework.messaging.simp.user.SimpUserRegistry) Bean(org.springframework.context.annotation.Bean)

Example 3 with UserRegistryMessageHandler

use of org.springframework.messaging.simp.user.UserRegistryMessageHandler in project spring-framework by spring-projects.

the class TestValidator method stompBrokerRelay.

@Test
public void stompBrokerRelay() {
    loadBeanDefinitions("websocket-config-broker-relay.xml");
    HandlerMapping hm = this.appContext.getBean(HandlerMapping.class);
    assertNotNull(hm);
    assertThat(hm, Matchers.instanceOf(SimpleUrlHandlerMapping.class));
    SimpleUrlHandlerMapping suhm = (SimpleUrlHandlerMapping) hm;
    assertThat(suhm.getUrlMap().keySet(), Matchers.hasSize(1));
    assertThat(suhm.getUrlMap().values(), Matchers.hasSize(1));
    assertEquals(2, suhm.getOrder());
    HttpRequestHandler httpRequestHandler = (HttpRequestHandler) suhm.getUrlMap().get("/foo/**");
    assertNotNull(httpRequestHandler);
    assertThat(httpRequestHandler, Matchers.instanceOf(SockJsHttpRequestHandler.class));
    SockJsHttpRequestHandler sockJsHttpRequestHandler = (SockJsHttpRequestHandler) httpRequestHandler;
    WebSocketHandler wsHandler = unwrapWebSocketHandler(sockJsHttpRequestHandler.getWebSocketHandler());
    assertNotNull(wsHandler);
    assertThat(wsHandler, Matchers.instanceOf(SubProtocolWebSocketHandler.class));
    assertNotNull(sockJsHttpRequestHandler.getSockJsService());
    UserDestinationResolver userDestResolver = this.appContext.getBean(UserDestinationResolver.class);
    assertNotNull(userDestResolver);
    assertThat(userDestResolver, Matchers.instanceOf(DefaultUserDestinationResolver.class));
    DefaultUserDestinationResolver defaultUserDestResolver = (DefaultUserDestinationResolver) userDestResolver;
    assertEquals("/user/", defaultUserDestResolver.getDestinationPrefix());
    StompBrokerRelayMessageHandler messageBroker = this.appContext.getBean(StompBrokerRelayMessageHandler.class);
    assertNotNull(messageBroker);
    assertEquals("clientlogin", messageBroker.getClientLogin());
    assertEquals("clientpass", messageBroker.getClientPasscode());
    assertEquals("syslogin", messageBroker.getSystemLogin());
    assertEquals("syspass", messageBroker.getSystemPasscode());
    assertEquals("relayhost", messageBroker.getRelayHost());
    assertEquals(1234, messageBroker.getRelayPort());
    assertEquals("spring.io", messageBroker.getVirtualHost());
    assertEquals(5000, messageBroker.getSystemHeartbeatReceiveInterval());
    assertEquals(5000, messageBroker.getSystemHeartbeatSendInterval());
    assertThat(messageBroker.getDestinationPrefixes(), Matchers.containsInAnyOrder("/topic", "/queue"));
    List<Class<? extends MessageHandler>> subscriberTypes = Arrays.<Class<? extends MessageHandler>>asList(SimpAnnotationMethodMessageHandler.class, UserDestinationMessageHandler.class, StompBrokerRelayMessageHandler.class);
    testChannel("clientInboundChannel", subscriberTypes, 2);
    testExecutor("clientInboundChannel", Runtime.getRuntime().availableProcessors() * 2, Integer.MAX_VALUE, 60);
    subscriberTypes = Collections.singletonList(SubProtocolWebSocketHandler.class);
    testChannel("clientOutboundChannel", subscriberTypes, 1);
    testExecutor("clientOutboundChannel", Runtime.getRuntime().availableProcessors() * 2, Integer.MAX_VALUE, 60);
    subscriberTypes = Arrays.<Class<? extends MessageHandler>>asList(StompBrokerRelayMessageHandler.class, UserDestinationMessageHandler.class);
    testChannel("brokerChannel", subscriberTypes, 1);
    try {
        this.appContext.getBean("brokerChannelExecutor", ThreadPoolTaskExecutor.class);
        fail("expected exception");
    } catch (NoSuchBeanDefinitionException ex) {
    // expected
    }
    String destination = "/topic/unresolved-user-destination";
    UserDestinationMessageHandler userDestHandler = this.appContext.getBean(UserDestinationMessageHandler.class);
    assertEquals(destination, userDestHandler.getBroadcastDestination());
    assertNotNull(messageBroker.getSystemSubscriptions());
    assertSame(userDestHandler, messageBroker.getSystemSubscriptions().get(destination));
    destination = "/topic/simp-user-registry";
    UserRegistryMessageHandler userRegistryHandler = this.appContext.getBean(UserRegistryMessageHandler.class);
    assertEquals(destination, userRegistryHandler.getBroadcastDestination());
    assertNotNull(messageBroker.getSystemSubscriptions());
    assertSame(userRegistryHandler, messageBroker.getSystemSubscriptions().get(destination));
    SimpUserRegistry userRegistry = this.appContext.getBean(SimpUserRegistry.class);
    assertEquals(MultiServerUserRegistry.class, userRegistry.getClass());
    String name = "webSocketMessageBrokerStats";
    WebSocketMessageBrokerStats stats = this.appContext.getBean(name, WebSocketMessageBrokerStats.class);
    String actual = stats.toString();
    String expected = "WebSocketSession\\[0 current WS\\(0\\)-HttpStream\\(0\\)-HttpPoll\\(0\\), " + "0 total, 0 closed abnormally \\(0 connect failure, 0 send limit, 0 transport error\\)\\], " + "stompSubProtocol\\[processed CONNECT\\(0\\)-CONNECTED\\(0\\)-DISCONNECT\\(0\\)\\], " + "stompBrokerRelay\\[0 sessions, relayhost:1234 \\(not available\\), processed CONNECT\\(0\\)-CONNECTED\\(0\\)-DISCONNECT\\(0\\)\\], " + "inboundChannel\\[pool size = \\d, active threads = \\d, queued tasks = \\d, completed tasks = \\d\\], " + "outboundChannelpool size = \\d, active threads = \\d, queued tasks = \\d, completed tasks = \\d\\], " + "sockJsScheduler\\[pool size = \\d, active threads = \\d, queued tasks = \\d, completed tasks = \\d\\]";
    assertTrue("\nExpected: " + expected.replace("\\", "") + "\n  Actual: " + actual, actual.matches(expected));
}
Also used : UserDestinationResolver(org.springframework.messaging.simp.user.UserDestinationResolver) DefaultUserDestinationResolver(org.springframework.messaging.simp.user.DefaultUserDestinationResolver) StompBrokerRelayMessageHandler(org.springframework.messaging.simp.stomp.StompBrokerRelayMessageHandler) MessageHandler(org.springframework.messaging.MessageHandler) SimpleBrokerMessageHandler(org.springframework.messaging.simp.broker.SimpleBrokerMessageHandler) UserRegistryMessageHandler(org.springframework.messaging.simp.user.UserRegistryMessageHandler) UserDestinationMessageHandler(org.springframework.messaging.simp.user.UserDestinationMessageHandler) SimpAnnotationMethodMessageHandler(org.springframework.messaging.simp.annotation.support.SimpAnnotationMethodMessageHandler) UserRegistryMessageHandler(org.springframework.messaging.simp.user.UserRegistryMessageHandler) WebSocketHttpRequestHandler(org.springframework.web.socket.server.support.WebSocketHttpRequestHandler) SockJsHttpRequestHandler(org.springframework.web.socket.sockjs.support.SockJsHttpRequestHandler) HttpRequestHandler(org.springframework.web.HttpRequestHandler) StompBrokerRelayMessageHandler(org.springframework.messaging.simp.stomp.StompBrokerRelayMessageHandler) UserDestinationMessageHandler(org.springframework.messaging.simp.user.UserDestinationMessageHandler) SimpUserRegistry(org.springframework.messaging.simp.user.SimpUserRegistry) DefaultSimpUserRegistry(org.springframework.web.socket.messaging.DefaultSimpUserRegistry) SimpleUrlHandlerMapping(org.springframework.web.servlet.handler.SimpleUrlHandlerMapping) SockJsHttpRequestHandler(org.springframework.web.socket.sockjs.support.SockJsHttpRequestHandler) SimpleUrlHandlerMapping(org.springframework.web.servlet.handler.SimpleUrlHandlerMapping) HandlerMapping(org.springframework.web.servlet.HandlerMapping) SubProtocolWebSocketHandler(org.springframework.web.socket.messaging.SubProtocolWebSocketHandler) WebSocketHandler(org.springframework.web.socket.WebSocketHandler) SubProtocolWebSocketHandler(org.springframework.web.socket.messaging.SubProtocolWebSocketHandler) NoSuchBeanDefinitionException(org.springframework.beans.factory.NoSuchBeanDefinitionException) DefaultUserDestinationResolver(org.springframework.messaging.simp.user.DefaultUserDestinationResolver) Test(org.junit.Test)

Example 4 with UserRegistryMessageHandler

use of org.springframework.messaging.simp.user.UserRegistryMessageHandler in project spring-framework by spring-projects.

the class MessageBrokerConfigurationTests method userBroadcasts.

@Test
public void userBroadcasts() throws Exception {
    SimpUserRegistry userRegistry = this.brokerRelayContext.getBean(SimpUserRegistry.class);
    assertEquals(MultiServerUserRegistry.class, userRegistry.getClass());
    UserDestinationMessageHandler handler1 = this.brokerRelayContext.getBean(UserDestinationMessageHandler.class);
    assertEquals("/topic/unresolved-user-destination", handler1.getBroadcastDestination());
    UserRegistryMessageHandler handler2 = this.brokerRelayContext.getBean(UserRegistryMessageHandler.class);
    assertEquals("/topic/simp-user-registry", handler2.getBroadcastDestination());
    StompBrokerRelayMessageHandler relay = this.brokerRelayContext.getBean(StompBrokerRelayMessageHandler.class);
    assertNotNull(relay.getSystemSubscriptions());
    assertEquals(2, relay.getSystemSubscriptions().size());
    assertSame(handler1, relay.getSystemSubscriptions().get("/topic/unresolved-user-destination"));
    assertSame(handler2, relay.getSystemSubscriptions().get("/topic/simp-user-registry"));
}
Also used : UserRegistryMessageHandler(org.springframework.messaging.simp.user.UserRegistryMessageHandler) StompBrokerRelayMessageHandler(org.springframework.messaging.simp.stomp.StompBrokerRelayMessageHandler) UserDestinationMessageHandler(org.springframework.messaging.simp.user.UserDestinationMessageHandler) SimpUserRegistry(org.springframework.messaging.simp.user.SimpUserRegistry) Test(org.junit.Test)

Example 5 with UserRegistryMessageHandler

use of org.springframework.messaging.simp.user.UserRegistryMessageHandler in project spring-framework by spring-projects.

the class MessageBrokerConfigurationTests method userBroadcastsDisabledWithSimpleBroker.

@Test
public void userBroadcastsDisabledWithSimpleBroker() throws Exception {
    SimpUserRegistry registry = this.simpleBrokerContext.getBean(SimpUserRegistry.class);
    assertNotNull(registry);
    assertNotEquals(MultiServerUserRegistry.class, registry.getClass());
    UserDestinationMessageHandler handler = this.simpleBrokerContext.getBean(UserDestinationMessageHandler.class);
    assertNull(handler.getBroadcastDestination());
    String name = "userRegistryMessageHandler";
    MessageHandler messageHandler = this.simpleBrokerContext.getBean(name, MessageHandler.class);
    assertNotEquals(UserRegistryMessageHandler.class, messageHandler.getClass());
}
Also used : StompBrokerRelayMessageHandler(org.springframework.messaging.simp.stomp.StompBrokerRelayMessageHandler) MessageHandler(org.springframework.messaging.MessageHandler) SimpleBrokerMessageHandler(org.springframework.messaging.simp.broker.SimpleBrokerMessageHandler) UserRegistryMessageHandler(org.springframework.messaging.simp.user.UserRegistryMessageHandler) UserDestinationMessageHandler(org.springframework.messaging.simp.user.UserDestinationMessageHandler) SimpAnnotationMethodMessageHandler(org.springframework.messaging.simp.annotation.support.SimpAnnotationMethodMessageHandler) UserDestinationMessageHandler(org.springframework.messaging.simp.user.UserDestinationMessageHandler) SimpUserRegistry(org.springframework.messaging.simp.user.SimpUserRegistry) Test(org.junit.Test)

Aggregations

UserRegistryMessageHandler (org.springframework.messaging.simp.user.UserRegistryMessageHandler)5 StompBrokerRelayMessageHandler (org.springframework.messaging.simp.stomp.StompBrokerRelayMessageHandler)4 SimpUserRegistry (org.springframework.messaging.simp.user.SimpUserRegistry)4 UserDestinationMessageHandler (org.springframework.messaging.simp.user.UserDestinationMessageHandler)4 Test (org.junit.Test)3 MessageHandler (org.springframework.messaging.MessageHandler)3 SimpAnnotationMethodMessageHandler (org.springframework.messaging.simp.annotation.support.SimpAnnotationMethodMessageHandler)3 SimpleBrokerMessageHandler (org.springframework.messaging.simp.broker.SimpleBrokerMessageHandler)3 Bean (org.springframework.context.annotation.Bean)2 HashMap (java.util.HashMap)1 NoSuchBeanDefinitionException (org.springframework.beans.factory.NoSuchBeanDefinitionException)1 AbstractBrokerMessageHandler (org.springframework.messaging.simp.broker.AbstractBrokerMessageHandler)1 DefaultUserDestinationResolver (org.springframework.messaging.simp.user.DefaultUserDestinationResolver)1 UserDestinationResolver (org.springframework.messaging.simp.user.UserDestinationResolver)1 HttpRequestHandler (org.springframework.web.HttpRequestHandler)1 HandlerMapping (org.springframework.web.servlet.HandlerMapping)1 SimpleUrlHandlerMapping (org.springframework.web.servlet.handler.SimpleUrlHandlerMapping)1 WebSocketHandler (org.springframework.web.socket.WebSocketHandler)1 DefaultSimpUserRegistry (org.springframework.web.socket.messaging.DefaultSimpUserRegistry)1 SubProtocolWebSocketHandler (org.springframework.web.socket.messaging.SubProtocolWebSocketHandler)1