Java EE解决方案中消息传递的必要性

时间:2012-10-09 16:17:48

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

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

  1. 第一个进程将搜索结果存储在MySQL数据库中,并发送一条消息,其中包含已放入表中的新行的ID。
  2. MOM唤醒第二个进程以使用存储在MySQL数据库中的新原始数据。
  3. 第二个进程在完成索引真实数据库(HBase)中的数据时清除MySQL表。
  4. 我需要对我的设计进行专家评论,以验证其适用性。例如,如果第二个进程连续轮询表以查看是否有新记录,该怎么办?我使用的是正确的技术还是矫枉过正?我应该简化我的设计还是我错过了什么?如果我的解决方案合适,在实施过程中是否应该记住一些事项?提前谢谢。

1 个答案:

答案 0 :(得分:1)

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

所以,像这样的事情会这样做:

  1. [P1]将搜索结果发送到某个JMS队列“INDEX.QUEUE”。
  2. [P2]只需异步处理队列“INDEX.QUEUE”的消息,并根据消息有效负载中的搜索结果生成搜索索引。
  3. 消息传递可以帮助您完成这些任务,轮询数据库表几乎是相同的,但更棘手,所以当您拥有专为此任务设计的持久性和事务性MOM时,为什么要重新发明轮子。