【问题标题】:Necessity of Messaging in a Java EE SolutionJava EE 解决方案中消息传递的必要性
【发布时间】:2012-10-10 02:03:29
【问题描述】:

考虑一个在网络上搜索特定数据的工作进程。需要另一个过程来索引第一个过程的结果以供以后使用。索引部分涉及以特定方式将原始数据(搜索结果)写入一个巨大的分布式 HBase 存储库。我无法判断这两个过程相互比较的速度。我们可能会遇到这样一种情况,其中一个系统暂时停机,需要在唤醒时执行任务。我正在使用 JavaEE。目前,这是我想到的实现方式。

  1. 第一个进程将其搜索结果存储在 MySQL 数据库中,并发送一条消息,其中包含已放入表中的新行的 ID。
  2. MOM 唤醒第二个进程以使用存储在 MySQL 数据库中的新原始数据。
  3. 第二个进程在完成对真实数据库 (HBase) 中的数据的索引后,清空 MySQL 表。

我需要专业的 cmets 来验证我的设计是否合适。例如,如果第二个进程不断地轮询表以查看是否有新记录怎么办?我是在使用正确的技术还是矫枉过正?我应该简化我的设计还是遗漏了什么?如果我的解决方案是合适的,在实施过程中我应该记住什么吗?提前致谢。

【问题讨论】:

    标签: java jakarta-ee jms java-ee-6 messaging


    【解决方案1】:

    如果可能,我会坚持更简单的设计,放弃 MySQL 临时表并坚持使用 JMS。

    所以,这样的事情可以做到:

    1. [P1] 将搜索结果发送到某个 JMS 队列“INDEX.QUEUE”。
    2. [P2] 简单地异步吃掉队列“INDEX.QUEUE”的消息,并根据消息负载中的搜索结果生成搜索索引。

    消息可以帮助您完成这些任务,轮询数据库表几乎相同,但更棘手,所以当您拥有专为此任务设计的持久性和事务性 MOM 时,为什么要重新发明轮子。

    【讨论】:

    • 谢谢。如果消息变大会发生什么?考虑队列中的数十条消息,每条消息的大小为 10-50 MB。在这种情况下使用该临时表是更好,还是根本没有任何区别?
    • 当然。大小确实很重要,但对于所有主要供应商来说,
    • 我正在使用 GlassFish v3,正如您刚才所说,它可以轻松配置为使用数据库进行消息存储。你的建议真的很有帮助。
    • 好!也就是说,我不太确定使用数据库作为消息存储在所有情况下都是性能方面的最佳解决方案。但这取决于你认为什么是最重要的。反正我不知道 Glassfish/OpenMQ 的性能细节。
    猜你喜欢
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多