Spring Web Socket - 从MQ监听器通知客户端

3

我正在使用 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);

我不确定这个方法是否有效,我会尝试一下。我想知道是否有更好的方法。

是否有更好的方法或更好的方式来做这件事?

1个回答

2
也许你可以看一下Artem Bilan对以下问题的回答:Spring如何使用websockets向已连接的客户端广播消息? 如果您的Java监听器是在服务中的,则可以在同一个服务中执行以下操作,并调用标记为WS通知端点的sendTo函数,将预期发送给正在侦听的WS客户端的消息传递。
@Autowired
private SimpMessagingTemplate brokerMessagingTemplate;
.......
this.brokerMessagingTemplate.convertAndSend("/topic/greetings", "foo");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接