【发布时间】:2020-01-07 20:02:39
【问题描述】:
我正在尝试编写一个订阅外部只读 STOMP 代理并读取/处理它发布的消息的 Spring 服务。
消息由铁路公司推送到主题“/topic/TRAIN_MVT_ALL_TOC”。我可以成功连接到该主题,但似乎无法实例化其消息的侦听器。
我已经设置了一个 Spring @Configuration 类来连接它,并且在运行应用程序后它似乎可以正确连接。
我还创建了消息处理例程,使用@MessageMapping 注释来收听我感兴趣的特定主题(“TRAIN_MVT_ALL_TOC”)。问题是它似乎永远不会被调用。
配置类代码:`
@Configuration
@EnableWebSocketMessageBroker
public class StompConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/TRAIN_MVT_ALL_TOC").withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.setApplicationDestinationPrefixes("/app");
registry.enableStompBrokerRelay("/topic")
.setRelayHost("datafeeds.networkrail.co.uk")
.setRelayPort(61618)
.setSystemLogin("MYEMAIL")
.setSystemPasscode("MYPASSWORD")
;
}
}
消息处理程序代码:
@MessageMapping("/TRAIN_MVT_ALL_TOC")
public void onMessage(@Payload String message) throws Exception {
System.out.println(message);
}
以下日志条目输出到控制台,表示连接成功。
oswscWebSocketMessageBrokerStats : WebSocketSession[0 当前 WS(0)-HttpStream(0)-HttpPoll(0), 0 总数, 0 异常关闭 (0 连接失败, 0 发送限制, 0 传输错误)], stompSubProtocol[已处理 CONNECT (0)-CONNECTED(0)-DISCONNECT(0)],stompBrokerRelay[1 个会话,ReactorNettyTcpClient[TcpClient: 连接到 datafeeds.networkrail.co.uk:61618](可用),已处理 CONNECT(1)-CONNECTED(1) -DISCONNECT(0)],inboundChannel[池大小 = 0,活动线程 = 0,排队任务 = 0,完成任务 = 0],outboundChannelpool 大小 = 0,活动线程 = 0,排队任务 = 0,完成任务 = 0] , sockJsScheduler[pool size = 1, active threads = 1, queued tasks = 0, completed tasks = 0]
但是,消息永远不会被打印出来。几天来,我一直在努力查明这一点,因此我们将不胜感激。
【问题讨论】:
标签: java spring activemq stomp