通过Java EE应用程序中的消息队列对临时数据进行后台处理

时间:2011-10-26 12:08:13

标签: java-ee architecture message-queue rabbitmq

我正在构建一个Java EE Web应用程序,该应用程序还具有JAX-RS API,以便其他网站上的插件可以向其发送数据,将其视为从各个客户端站点接收数据的分析服务器并具有其自己的管理界面,可以查看统计数据。

客户端发送的数据当前保存在数据库的临时表中;并且应该在之后进一步处理,并保存到保存统计数据的真实表中。

之后如何实施该数据的后台处理?我应该自己创建线程,还是应该使用消息队列系统(我已经看过RabbitMQ,看起来很有希望,但是我不确定它是否适合嵌入Java EE应用程序)

另外,我应该在当前数据库中保存临时数据(来自用户的一大块信息,作为JSON / XML字符串),还是认为在另一个临时数据库中保存更合适,例如我再次听说过Redis,mongodb等nosql数据,但无法确定它们是否适用于此。

最后,如果我应该使用消息队列,请求是由消息队列处理还是由JAX-RS处理?我对JAX-RS的关注是它可能不像队列那样高效,而且我说,我真的不需要API,我只想获得一个base-64编码的字符串(包含各种统计信息)来自客户网站。

1 个答案:

答案 0 :(得分:1)

这里有很多问题:)我会尝试按顺序回答:

  • 您将无法在您的JavaEE应用程序中嵌入RabbitMQ,因为它在Erlang上运行。如果在JavaEE应用程序中嵌入消息代理是您的要求,那么您更应该关注ActiveMQ或HornetQ。
  • 如果使用邮件系统的持久存储功能,则无需将传入邮件存储在临时数据库中。如果传入的消息很小(KB不是MB),这种方法可以正常工作。
  • 使用消息传递系统作为传入消息的主要管理者也将为您的线程问题提供答案:在消息队列上使用1-n个并发消费者(即您选择的特定消息系统的并发消费者)来处理消息并将结果写入统计数据库。
  • 最后,请三思而后行直接暴露您的邮件系统而不是HTTP外观(在您的情况下是JAX-RS),因为并非所有客户都有能力说出正确的协议(如果您选择RabbitMQ,AMQP)虽然有优秀的跨平台支持。此外,直接公开它可能是一个安全问题。