在 Web 聊天服务中使用 JMS

Posted

技术标签:

【中文标题】在 Web 聊天服务中使用 JMS【英文标题】:Using JMS in a web chat service 【发布时间】:2014-12-16 02:02:28 【问题描述】:

想象一个 (HipChat-like) 聊天应用程序,具有私人和多用户聊天、离线消息、状态跟踪、历史搜索等功能。前端将是使用 WebSockets 的 javascript 应用程序;后端将基于 JavaEE7。综上所述,您认为使用 JMS 进行内部处理是否是一个好主意,每个对等方都是 JMS 客户端,聊天室是 JMS 主题等?我想它不会让我们通过将多个功能委托给 JMS(异步广播、消息归档、离线消息存储和传递等)来重新发明***

另一方面,JMS 更多的是关于组件之间的集成、异步和松散耦合。你认为它会满足聊天服务的需求吗?

附:要求应用程序不使用 Jabber/XMPP 等外部基础架构。

【问题讨论】:

您不需要像 JMS 这样重量级的东西。只需使用 TCP。 TCP 是 OSI 4 级协议,而 JMS 是消息传递基础架构;请更加集中。在我们的例子中,已经选择了 transport 技术(WebSocket)。我要问的是消息处理技术。 【参考方案1】:

JMS 的一个(可能)冲突属性是您无法在部署后以编程方式创建主题。即,使用单个 JMS 主题支持单个聊天室,您必须预先创建聊天室,并且不能重命名它们或即时创建新聊天室。因此,我认为 JMS 并不适合。

【讨论】:

似乎Session.createTemporaryTopic() 仍然可以解决问题。 所以你希望你的所有聊天室在轻微的网络中断时都消失? 你的意思是“停电”? :) 网络中断不会导致 JMS 代理关闭,只会断开 WebSocket 端点。但你是对的,以这种方式创建的聊天室将具有临时性。 参见,例如,activemq.apache.org/how-can-i-support-auto-reconnection.html 和这个相关问题:***.com/questions/6432672/…

以上是关于在 Web 聊天服务中使用 JMS的主要内容,如果未能解决你的问题,请参考以下文章

多个 JMS ConnectionFactory

将独立 JMS 应用程序移植到 Web/应用程序服务器

JMS和Web服务之间的区别[重复]

如何从运行在 WebSphere 应用程序服务器 v7 上的 Web 应用程序通过 JMS 连接到 Web 方法?

如何在服务器端建立Web套接字以实现聊天?

是否可以在我的 Web 应用程序中使用来自 Google Talk 的音频聊天服务?