首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JBoss Seam -应用程序中的大规模消息传递

JBoss Seam -应用程序中的大规模消息传递
EN

Stack Overflow用户
提问于 2009-09-26 20:10:19
回答 1查看 566关注 0票数 0

我目前正在处理一个应用程序,该应用程序的设置与以下聊天类推相匹配:

  • 聊天是存储在内存中并包含聊天消息列表的对象。
  • 在几个浏览器窗口中呈现一个聊天,并使用一个4j:push来进行更新。

编程设置如下所示:在不同会话中的页作用域seam组件之间共享聊天对象及其消息的实例。现在,当任何会话发布新消息(即修改聊天对象)时,应该将新消息通知所有seam组件,以便在所有客户端上将新状态转发给UI。

我可以想出三种方法来实现这一点:

  1. Seam的事件以chat ID作为参数,然后每个组件检查ID,更新或忽略消息
  2. JMS队列或一个JMS主题,其中每个组件只为聊天使用过滤器侦听
  3. 共享聊天对象中的纯Java侦听器机制,即每个seam组件都向它注册,通知是纯的和直接的java

为了便于论证,假设聊天的数量很大(数万),而聊天用户的数量很小(假设是2-10)。

每个量表的性能如何?你还有什么其他的建议吗?如何用Seam来做这件事,并且表现良好?

在我看来,(1)将是集成和干净的,但最终您会通知数万个组件,其中只有少数组件真正需要它。所以它可能不会放大。

(2)是集成的,只依赖于JMS提供程序的性能(可以交换),并且也可以在集群环境中工作,而不需要修改。我不确定JMS的性能,即每秒有几百条消息和上千个具有不同过滤器的侦听器吗?

(3)将是快速的,因为只会通知所需的组件,并且通知是纯的和直接的java。但是,由于执行了跨会话/组件/线程,可能会出现并发/访问问题。

对于(1)和(3),如果需要的话,必须手动添加支持集群的解决方案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-09-26 20:32:36

我推荐2)。我还建议将JMS从等式中删除--尽管它将使您能够切换消息提供程序,但也会使您无法使用消息传递系统的更高级功能。如果您使用的是Oracle数据库,AQ会做出明智的选择(它支持JMS .)。否则,我建议使用AMQP,它应该可以通过JBoss消息传递或第三方解决方案(如RabbitMQ )获得。

由于您显然有消息传递问题,所以应该选择使用消息传递解决方案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1482076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档