我正在使用带有sockjs和stomp的spring websocket 4.2.4,我正试图从服务器向异步任务中的所有订阅者发送消息,但没有运气
我的课程是:
public class MyClass{
private timer;
public MyClass(){
this.timer = new Timer();
}
@Async
public void myMethod(){
timer.schedule(new MyReminder(), 1000);
}
@Async
private class MyReminder extends TimerTask{
@Autowired
SimpMessagingTemplate messageingTemplate;
@Override
public void run(){
messageingTemplate.convertAndSend("/app/subscribers","message");
}
}
}
但订阅者没有收到消息
任何帮助?我做错了什么:(
*编辑*
我的消息经纪人:
public void configureMessageBroker(MessageBrokerRegistry config){
config.enableSimpleBroker("/topic","/myApp");
config.setApplicationDestinationPrefixes("/myApp");
}
当我订阅时:
subscribe("myApp/someRoute")
谢谢!
**编辑2:**
感谢我帮助解决问题:)
答案 0 :(得分:0)
你可以通过经纪人目的地来做到这一点。
请分享您的AbstractWebSocketMessageBrokerConfigurer
。
通常我们这样做:
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.setApplicationDestinationPrefixes("/app/")
.enableSimpleBroker("/queue/", "/topic/");
}
所有/app/
个目的地都不会被经纪人处理。只有@SubscribeMapping
- 来自客户端计划的请求 - 回复方案,您才可以订阅它们。
根据STOMP,您的任务完全适合发布 - 订阅故事 - topic
。
此外,您的订阅者(客户)应该订阅代理上的某个主题,之后您只需向其发送消息即可。