2016-05-05 3 views
2

Я использую сетевые сокеты с использованием 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); 

Также я не уверен, если это работает. Я попробую это. Я хочу знать, есть ли лучший подход.

Есть ли лучший подход или лучший способ сделать это?

ответ

2

Может быть, если вы посмотрите на ответ Артем Билан предоставил на следующий вопрос: Spring, how to broadcast message to connected clients using websockets?

Так что, если ваш Java слушатель сообщений Rabbit MQ в службе, то вы можете сделать следующее в той же службе и вызовите оконечную точку уведомлений отправленной по умолчанию отправки и передайте ожидаемое сообщение для прослушивания клиентов WS.

@Autowired 
private SimpMessagingTemplate brokerMessagingTemplate; 
....... 
this.brokerMessagingTemplate.convertAndSend("/topic/greetings", "foo");