Spring Web Socket - 从MQ Listener通知客户端

时间:2016-05-05 13:17:17

标签: html5 websocket stomp spring-websocket

我正在使用Spring使用网络套接字。

这是我的控制器。一个简单的控制器,它接受一个结果对象并返回一个带有填充值的结果对象。它会将消息发布到STOMP主题订阅者“/ topic / update”。

@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");
    }

}

我的Spring配置文件:

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);
  });
});

我在javascript中有以下代码,它创建了一个STOMP Web Socket客户端。它正在订阅'/ topic / update'

ReportController controller = new ReportController();
controller.pushMessage(report);

现在我计划添加一个侦听器(java而不是javascript),它将侦听Rabbit MQ消息,我想将消息对象传递给我的控制器并将所有消息推送到Web Socket客户端。

当消息到达我的MQ侦听器时,我不确定如何通知我的所有Web套接字客户端。 我该怎么做?

创建报表控制器实例并调用pushMessage以通知我的所有Web套接字客户端是一种好方法。

format_strings = ','.join(['%s'] * len(terms))
sql = """
SELECT i.id, i.title, i.description, MATCH (i.title, i.description) AGAINST (%s IN NATURAL LANGUAGE MODE) AS score
FROM items i
WHERE MATCH (i.title, i.description) AGAINST (%s IN NATURAL LANGUAGE MODE) AS score""" % format_strings, (terms, terms)

我也不确定,如果这样可行的话。我会尝试的。我想知道是否有更好的方法。

有更好的方法或更好的方法吗?

1 个答案:

答案 0 :(得分:2)

也许如果你看一下Artem Bilan对以下问题的反应:Spring, how to broadcast message to connected clients using websockets?

因此,如果您的Rabbit MQ消息的java侦听器在服务中,那么您可以在同一服务中执行以下操作并调用sendTo标记的WS通知端点并传递预期的消息以转发到WS客户端侦听。 / p>

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