使用 websocket 作为传输的基于 Java 的 JMS 框架

标签 java websocket jms

我正在尝试实现基于java的客户端和服务器之间的双向通信,主要协议(protocol)是JMS。但由于客户端所在的管理 Intranet 限制,不可能有入站连接。主要思想是将 JMS 包装在类似 HTTP 的内容中。我选择了Websocket。我找到的唯一解决方案是 OpenMQ。它支持这一点。有没有更好的解决办法?

谢谢。

最佳答案

与 Websocket 相比,JMS 是一种不同的通信方式。简而言之:

  • Websockets 是 sockets 的实现对于网络。套接字是在两个对等点之间建立的连接。当对等方交换消息时,连接处于保持状态。连接在整个通信过程中保持,并在通信结束后关闭。
  • JMS 是一种 Java 标准/API,用于在 2 个或更多客户端之间发送消息。然而,它的结构不同。在 JMS 中,有一个名为消息代理的实体,消息在其中发送、存储,然后由客户端检索。因此,这种方法可以是分布式环境。

因此,JMS 是 Websockets 的一种不同方法,因为 JMS 是“无状态”的并且可选异步,而 Websockets 是有状态且同步的。

因此,我认为您不应该在这两种方法之间做出选择,只考虑防火墙限制,但您应该更加关注这两种方法的上下文,决定哪一种更适合您的情况。

如果您认为 JMS 是更好的解决方案,那么您应该更改防火墙规则,以便在特定的安全限制下允许用于 JMS 的端口(默认为 1099)。 否则,您可以使用 websockets,接受同步通信的性能限制。

还有一种将 websockets 与 JMS 集成的方法,由 openMQ 捕获。和其他框架。但是,我不知道与简单的 JMS 相比对性能的影响是什么,我认为只有当我们谈论 Web 应用程序时才应该选择此解决方案。

附加评论

还可以通过 JMS 使用 HTTP 调整。因此,您不必使用 websockets。您仍将使用 JMS,但将有一个 servlet 接收 HTTP 请求并将它们重定向到 JMS 服务。这也已在 openMQ 中实现,如您在 tutorial 中看到的那样。 。通过这种方式,您可以超越防火墙限制,而不会增加 Websocket 的复杂性。

关于使用 websocket 作为传输的基于 Java 的 JMS 框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31110554/

相关文章:

haskell - Haskell 中 websocket 的 "real server"是什么?

database - Microsoft SQL 数据库的 WebSocket 监听器

java - Websphere MQ : reading from DLQ with JMS

java - 从 thenReturn mockito 返回迭代器

java.lang.IllegalStateException : Neither BindingResult nor plain target object for bean name 'login' available as request attribute

java - SQL Server 2012 存储过程在 JDBC 中不返回任何结果

java - 扩展 java 中的 Throwable 与 Exception

.net - 从 DMZ 到 LAN 的通信

jms - 使用 DefaultMessageListenerContainer 连接到 WebSphere MQ 重复抛出 "Connection closed"

apache-kafka - Apache Kafka的监视UI-Kafka Manager vs Kafka Monitor