Spring-引导应用程序通过 WebSocket 在网页上显示 JMS 消息

Spring-boot app displaying JMS messages on WebPage via WebSocket

我在 spring-boot 中需要一个简单的 Web 应用程序,用于侦听 JMS 队列中的消息,到达时它应该通过 WebSocket 显示在网页上。

我已经搜索了示例并找到了几个;我自己测试过的 WebSocket 或 JMS,但没有成功将它们连接在一起。

我搜索了一个示例,但没有找到任何示例,在我看来,我认为这应该很简单,因为这是一个非常基本的要求。

您是否知道 JMS 和 HTML 通过 WebSocket 显示的任何示例,您可以分享这些示例或者可以提供一些提示或帮助我解决它?

Spring Integration 来拯救。

您可以编写 <int-jms:message-driven-channel-adapter> 从 JMS 队列中读取消息并将它们转发到 <int-websocket:outbound-channel-adapter>。最后一个只是将消息发送到连接的 WebSocket 会话。

查看这些 Spring 有关此事的集成示例:

https://github.com/spring-projects/spring-integration-samples/tree/master/basic/jms

https://github.com/spring-projects/spring-integration-samples/tree/master/basic/web-sockets

更新

要将消息发送到所有订阅的 WebSocket 会话,您应该这样做:

<int:splitter input-channel="enricheMessage" output-channel="sendMessage" apply-sequence="false">
    <int-groovy:script>
        @serverWebSocketContainer.sessions.keySet().collect {
            org.springframework.integration.support.MessageBuilder.withPayload(payload)
                    .copyHeaders(headers)
                    .setHeader('simpSessionId', it)
                    .build()
        }
    </int-groovy:script>
</int:splitter>

使用此 Groovy 脚本,我从 serverWebSocketContainer(所有连接的客户端)检索 session ids,遍历它们以构建消息以通过其 websocket 发送它们。而split最后,要一一发送给<int-websocket:outbound-channel-adapter>