Я использую сетевые сокеты с использованием Spring.Spring Web Socket - уведомляет клиента от слушателя MQ
Вот мой контроллер. Простой контроллер, который принимает объект результата и возвращает объект результата с заполненными значениями. Он будет публиковать сообщение для подписчиков темы 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;
}
}
Моя весна файл конфигурации:
@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, который создает клиент ТОПАЙТЕ Web Socket. Он подписавшись на «/ тему/обновление»
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), который будет слушать сообщение Кролика MQ, я хочу передать объект сообщения мой контроллер и нажмите все сообщение для клиентов веб-сокета.
Я не уверен, как уведомить всех моих клиентов веб-сокета, когда сообщение поступило в мой слушатель MQ. Как я это сделаю?
Это хороший способ создать экземпляр диспетчера отчетов и вызвать pushMessage для уведомления всех моих клиентов сокетов.
ReportController controller = new ReportController();
controller.pushMessage(report);
Также я не уверен, если это работает. Я попробую это. Я хочу знать, есть ли лучший подход.
Есть ли лучший подход или лучший способ сделать это?