2013-01-01 57 views
0

我有两个启动脚本来运行独立应用程序。独立的Spring + Java + JMS

  1. startQueue.sh用于侦听JMS消息并将消息存储到Oracle数据库表中。
  2. startProcess.sh - 获取表信息并处理数据并从数据库中删除信息并终止。

我的问题是,何时将JMS消息插入到DB中,然后使用定时器自动触发并处理表信息。

+0

您要么触发(当插入消息时)或使用计时器,你会如何使用两者? –

+2

我在这里没有看到问题? – eis

回答

0

您可以不断运行第二个应用程序,轮询数据库,但我认为更好的设计是一步完成所有操作 - 接收JMS消息,插入它(如果需要),然后处理它全部在一个应用程序中。

+0

你是对的,灰色。但问题是,在处理数据时,如果出现任何问题,我们不希望从数据库中删除数据。我们再次需要获取并处理数据,直至成功。一旦数据库没有任何数据,我们将终止。这个过程会在有数据的数据库时自动触发。您能否指导我遵循哪个流程。 – user1941080

+0

阅读此内容 - http://mikehadlow.blogspot.com/2012/04/database-as-queue-anti-pattern.html然后,如果您仍觉得必须将数据库用作工作队列,则唯一的选择是将会有一个外部进程持续查询数据库,看看是否有任何需要处理的东西。 – GreyBeardedGeek

+0

@ user1941080这种情况正在尖叫事务管理。根据消息队列的功能,您应该能够删除消息并在同一个事务中在数据库中处理消息。如果处理失败,你可以随后把消息放入一个死信息队列中? – flup