Spring Web Socket - 从 MQ 监听器通知客户端
Posted
技术标签:
【中文标题】Spring Web Socket - 从 MQ 监听器通知客户端【英文标题】:Spring Web Socket - notify the client from the MQ Listener 【发布时间】:2016-05-05 13:17:16 【问题描述】:我正在使用 Spring 使用网络套接字。
这是我的控制器。一个简单的控制器,它将接受一个结果对象并返回一个带有填充值的结果对象。它将向 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 Socket 客户端。
当消息到达我的 MQ 侦听器时,我不确定如何通知我的所有 web-socket 客户端。 我该怎么做?
创建报表控制器实例并调用pushMessage通知我所有的Web套接字客户端的好方法吗?
ReportController controller = new ReportController();
controller.pushMessage(report);
我也不确定这是否有效。我会试试的。我想知道是否有更好的方法。
有没有更好的方法或更好的方法来做到这一点?
【问题讨论】:
【参考方案1】:如果您查看 Artem Bilan 对以下问题的回复:Spring, how to broadcast message to connected clients using websockets?
因此,如果您的 Rabbit MQ 消息的 java 侦听器在服务中,那么您可以在同一服务中执行以下操作,并调用 sendTo 标记的 WS 通知端点并将预期消息传递给正在侦听的 WS 客户端。
@Autowired
private SimpMessagingTemplate brokerMessagingTemplate;
.......
this.brokerMessagingTemplate.convertAndSend("/topic/greetings", "foo");
【讨论】:
以上是关于Spring Web Socket - 从 MQ 监听器通知客户端的主要内容,如果未能解决你的问题,请参考以下文章
在Active MQ中使用XML spring的JMS SOAP
Spring Boot Web Socket RabbitMQ 不可用