我正在尝试编写一个Spring服务,它订阅一个外部只读STOMP代理,并读取/处理它发布的消息。
铁路公司将消息推送到主题“/topic/TRAIN\u MVT\u ALL\u TOC”。我可以成功地连接到主题,但似乎无法将侦听器实例化为其消息。
我已经设置了一个Spring@Configuration类来连接它,在运行应用程序之后,它似乎连接正确。
我还创建了消息处理例程,使用@Message映射注释来收听我感兴趣的特定主题(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);
}
以下日志条目输出到控制台,表示连接成功。
o. s. w. s. c.WebSocketMessageBrokerStats: WebSocketsession[0当前WS(0)-HttpStream(0)-HttpPoll(0),0总计,0异常关闭(0连接失败,0发送限制,0传输错误)],StumpSubProtocol[已处理CONNECT(0)-CONNECTED(0)-DISCONNECT(0)],StumpBrokerRelay[1会话,ReactorNettyTcpClient[TcpClient:连接到datafeeds.networkrail.co.uk:61618](可用),已处理的CONNECT(1)-CONNECTED(1)-DISCONNECT(0)],在边界通道[池大小=0,活动线程=0,排队任务=0,已完成任务=0],在边界通道大小=0,活动线程=0,排队任务=0,已完成[池大小=1,活动线程=1,排队任务=0,已完成任务=0]
然而,这条消息从未被打印出来。几天来,我一直在努力弄清这件事的真相,所以我非常感谢您的帮助。
铁路公司将消息推送到主题“/topic/TRAIN\u MVT\u ALL\u TOC”。我可以成功地连接到主题,但似乎无法将侦听器实例化为其消息。
您是指客户端的侦听器,例如sockjs客户端?
@MessageMapping("/TRAIN_MVT_ALL_TOC")
public void onMessage(@Payload String message) throws Exception {
System.out.println(message);
}
您不返回任何东西,您需要将其发送到这样的主题:
@MessageMapping("/TRAIN_MVT_ALL_TOC")
@SendTo("/topic/TRAIN_MVT_ALL_TOC")
public Greeting onMessage(HelloMessage message) throws Exception {
return new Greeting("hello");
}
或者,如果构造函数的参数中包含SimpMessageSendingOperations(应该由spring boot本身自动连接),则可以向同一主题发送多条消息,如下所示:
@Autowired
public Constructor(SimpMessageSendingOperations messagingTemplate) {
this.messagingTemplate = messagingTemplate;
}
@MessageMapping(WebSockets.READER_MAPPING)
public void streamOverWebsocket(HelloMessage message) throws Throwable {
String topicUrl = "/topic/TRAIN_MVT_ALL_TOC";
messagingTemplate.convertAndSend(topicUrl, new Message("response 1"));
messagingTemplate.convertAndSend(topicUrl, new Message("response 2"));
...
}
最好将传入和传出封装在定义的类中。这样,序列化和反序列化就更容易了。
资料来源:
我正在开发一个利用websockets功能的Spring应用程序。为了使它更健壮,我使用了STOMP/SimpleBrokerMessageHandler,如文档中所述。一切进展顺利,我已经能够非常快速地连接javasctipt客户端,所以我转而使用“AndroidSync”库在Android客户端上工作。 我发现的事实是,Android客户端(我想其他客户端也是如此)在服务器处理订阅请求后没有收
问题内容: 我正在使用Paho发送和接收mqtt消息。到目前为止,发送消息一直没有问题,我正在使用mosquitto接收消息。 现在,我想使用Java客户端读取消息,并且注意到关于接收消息的文档越来越少。 我实现了MqttCallback接口,但仍然无法弄清楚如何阅读已订阅的主题的消息。 到目前为止,这是我的源代码,我可以使用mosquitto_sub读取消息。 问题答案: 您将在代理有时间将消息
一、STOMP协议介绍 STOMP即Simple (or Streaming) Text Orientated Messaging Protocol,简单(流)文本定向消息协议,它提供了一个可互操作的连接格式,允许STOMP客户端与任意STOMP消息代理(Broker)进行交互。STOMP协议由于设计简单,易于开发客户端,因此在多种语言和多种平台上得到广泛地应用。 STOMP协议的前身是TTMP协
微信文档:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.addTemplate.html 组合模板并添加至帐号下的个人模板库 $tid = 563; // 模板标题 id,可通过接口获取,也可登录小程序后台查看获取 $kidLi
开普勒消息目前分为三大类:公告,告警和通知。 通知中根据不同的操作事件类型,分为十几个事件。每个事件都跟项目操作相关。便于接收项目操作变更的通知。 分类 事件 公告 Alarm 告警 Proclaim 通知 Build,Apply,Audit,Delete,Rollback,Logging,Reboot,Command,Storage,Extend... 订阅界面: 用户中心,点击头像,下拉菜单→
我正在使用Spring stomp websocket框架向客户机发送订阅消息。我们使用ActiveMQ作为消息代理,并使用stomp javascript客户机。Spring 4.1.5和在此体系结构中,消息是通过以下方式发送的: 我只看到一个客户机接收到消息,而另一个没有。通过阅读Spring文档,我了解到这是默认的行为。谁能告诉我我做错了什么。 多谢了。