Spring Web Socket - 从 MQ Listener 通知客户端
Spring Web Socket - notify the client from the MQ Listener
我正在使用网络套接字 Spring。
这是我的控制器。一个简单的控制器,它将接受一个结果对象和 return 一个具有填充值的结果对象。它会向 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");
}
}
我在 java 脚本中有以下代码,它创建了一个 STOMP Web 套接字客户端。它正在订阅“/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 而不是在 java 脚本中),它将侦听 Rabbit MQ 消息,我想将消息对象传递到我的控制器并推送所有消息到 Web 套接字客户端。
当消息到达我的 MQ 侦听器时,我不确定如何通知我所有的网络套接字客户端。
我该怎么做?
创建报表控制器的实例并调用 pushMessage 通知我所有的 web 套接字客户端是不是一个好方法。
ReportController controller = new ReportController();
controller.pushMessage(report);
我也不确定这是否有效。我会试试的。我想知道有没有更好的方法。
是否有更好的方法或更好的方法?
也许如果您查看 Artem Bilan 对以下问题提供的答复:Spring, how to broadcast message to connected clients using websockets?
因此,如果您的 java Rabbit MQ 消息侦听器在服务中,那么您可以在同一服务中执行以下操作并调用 sendTo 标记的 WS 通知端点并将预期的消息传递出去WS 客户端正在监听。
@Autowired
private SimpMessagingTemplate brokerMessagingTemplate;
.......
this.brokerMessagingTemplate.convertAndSend("/topic/greetings", "foo");
我正在使用网络套接字 Spring。
这是我的控制器。一个简单的控制器,它将接受一个结果对象和 return 一个具有填充值的结果对象。它会向 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");
}
}
我在 java 脚本中有以下代码,它创建了一个 STOMP Web 套接字客户端。它正在订阅“/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 而不是在 java 脚本中),它将侦听 Rabbit MQ 消息,我想将消息对象传递到我的控制器并推送所有消息到 Web 套接字客户端。
当消息到达我的 MQ 侦听器时,我不确定如何通知我所有的网络套接字客户端。 我该怎么做?
创建报表控制器的实例并调用 pushMessage 通知我所有的 web 套接字客户端是不是一个好方法。
ReportController controller = new ReportController();
controller.pushMessage(report);
我也不确定这是否有效。我会试试的。我想知道有没有更好的方法。
是否有更好的方法或更好的方法?
也许如果您查看 Artem Bilan 对以下问题提供的答复:Spring, how to broadcast message to connected clients using websockets?
因此,如果您的 java Rabbit MQ 消息侦听器在服务中,那么您可以在同一服务中执行以下操作并调用 sendTo 标记的 WS 通知端点并将预期的消息传递出去WS 客户端正在监听。
@Autowired
private SimpMessagingTemplate brokerMessagingTemplate;
.......
this.brokerMessagingTemplate.convertAndSend("/topic/greetings", "foo");