我正在使用 Spring 的 web-sockets。
这是我的控制器。一个简单的控制器,它接受一个结果对象并返回一个带有填充值的结果对象。它会向 STOMP 主题订阅者“/topic/update”发布消息。
@Controller
public class ReportController {
@MessageMapping("/charthandler")
@SendTo("/topic/update")
public Result pushMessage(Result r) throws Exception {
Thread.sleep(3000); // simulated delay
Result result = new Result();
result.setTitle("ChartsPage");
return result;
}
}
我的Spring配置文件:
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/charthandler").withSockJS();
}
@Bean
public WebSocketHandler chartHandler() {
return new ChartHandler();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
}
}
我有以下 JavaScript 代码,用于创建 STOMP Web Socket 客户端。它正在订阅 '/topic/update'。
var socket = new SockJS('/reportapplication/charthandler/');
stompClient = Stomp.over(socket);
stompClient.connect({}, function(frame) {
console.log('Connected: ' + frame);
stompClient.subscribe('/topic/update', function(result) {
console.log(JSON.parse(result.body).title);
});
});
我正在计划添加一个监听器(Java而不是JavaScript),它将监听Rabbit MQ消息,我希望将消息对象传递给控制器,并将所有消息推送到Web套接字客户端。
当消息到达我的MQ监听器时,我不确定如何通知所有的Web套接字客户端。我该怎么做呢?
创建一个报告控制器实例并调用pushMessage来通知所有Web套接字客户端是否是一个好的方法呢?
ReportController controller = new ReportController();
controller.pushMessage(report);
我不确定这个方法是否有效,我会尝试一下。我想知道是否有更好的方法。
是否有更好的方法或更好的方式来做这件事?