Обработчики входящих сообщений и событий Spring websockets не запускаются, даже если исходящие сообщения в порядке - PullRequest
0 голосов
/ 18 июня 2019

У меня есть веб-сокеты Spring (с использованием Groovy / Grails), отправка сообщений клиенту в порядке, но мой обработчик входящих сообщений никогда не вызывается и мой обработчик событий (чтобы указать новую подписку, установленную от клиента). Несмотря на часы расследования, я понятия не имею, почему. Приветствуем любые предложения по проверке вещей и т. Д.

Конфигурация основного веб-сокета (работает нормально):

@CompileStatic
@Configuration
@EnableWebSocketMessageBroker
public class MainWebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
    SimpMessagingTemplate brokerMessagingTemplate

@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
    config.setApplicationDestinationPrefixes("/app");
    config.enableSimpleBroker("/topic", "/queue");
}

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
    registry.addEndpoint("/stomp").setAllowedOrigins("*").withSockJS();
}

@Bean
public GrailsSimpAnnotationMethodMessageHandler grailsSimpAnnotationMethodMessageHandler(SubscribableChannel clientInboundChannel, MessageChannel clientOutboundChannel, SimpMessagingTemplate brokerMessagingTemplate) {
    GrailsSimpAnnotationMethodMessageHandler handler = new GrailsSimpAnnotationMethodMessageHandler(clientInboundChannel, clientOutboundChannel, brokerMessagingTemplate);
    handler.setDestinationPrefixes(["/app","/queue","/topic"]);
    return ((GrailsSimpAnnotationMethodMessageHandler) (handler));
}

@Bean
GrailsWebSocketAnnotationMethodMessageHandler grailsWebSocketAnnotationMethodMessageHandler(
        SubscribableChannel clientInboundChannel,
        MessageChannel clientOutboundChannel,
        SimpMessageSendingOperations brokerMessagingTemplate
) {
    def handler = new GrailsWebSocketAnnotationMethodMessageHandler(clientInboundChannel, clientOutboundChannel, brokerMessagingTemplate)
    handler.destinationPrefixes = ["/app"]
    return handler
}

}

Обработчик входящих сообщений: (никогда не вызывается)

@Controller
public class ReceivedMessageController {
SimpMessagingTemplate brokerMessagingTemplate

@MessageMapping("/getinfo")
@PreAuthorize("hasRole('ROLE_USER')")
public void GetInfo(String msg) {
       brokerMessagingTemplate.convertAndSend('/topic/info', 'here is some info')
        }
    }
}

Обработчик события подписки (никогда не вызывается):

@Component
public class WebSocketEventListener {
SimpMessagingTemplate brokerMessagingTemplate

@EventListener
public void handleSessionSubscribeEvent(SessionSubscribeEvent event) {
    GenericMessage message = (GenericMessage) event.getMessage();
    String simpDestination = (String) 
    message.getHeaders().get("simpDestination");
    if (simpDestination.startsWith("/topic/info")) {
        brokerMessagingTemplate.convertAndSend('/topic/info', 'someone subscribed')
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...