Jakarta ee 在JavaEE应用程序中通过消息队列对临时数据进行后台处理

Jakarta ee 在JavaEE应用程序中通过消息队列对临时数据进行后台处理,jakarta-ee,architecture,message-queue,rabbitmq,Jakarta Ee,Architecture,Message Queue,Rabbitmq,我正在构建一个JavaEEWeb应用程序,它也有一个JAX-RSAPI,这样其他网站的插件就可以向它发送数据,可以把它想象成一个分析服务器,它接收来自不同客户端站点的数据,并有自己的管理界面,在那里可以查看统计数据 客户端发送的数据当前保存在数据库中的临时表中;并且应该在以后进行进一步处理,并保存到保存统计数据的实际表中 之后我应该如何实现该数据的后台处理?我应该自己创建线程,还是应该使用消息队列系统(我已经看过RabbitMQ,它似乎很有希望,但是我不确定它是否适合嵌入JavaEE应用程序)

我正在构建一个JavaEEWeb应用程序,它也有一个JAX-RSAPI,这样其他网站的插件就可以向它发送数据,可以把它想象成一个分析服务器,它接收来自不同客户端站点的数据,并有自己的管理界面,在那里可以查看统计数据

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

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

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

最后,如果我应该使用消息队列,那么请求应该由消息队列处理,还是由JAX-RS处理?我对JAX-RS的担心是,它的性能可能不如队列,正如我所说的,我并不真正需要API,我只想从客户端网站获得一个base-64编码字符串(包含各种统计信息)。

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

  • 您将无法在JavaEE应用程序中嵌入RabbitMQ,因为它在Erlang上运行。如果在JavaEE应用程序中嵌入MessageBroker是您的一项要求,那么您更希望查看ActiveMQ或HornetQ
  • 如果使用消息传递系统的持久存储功能,则无需将传入消息存储在临时数据库中。如果传入的消息很小(KBs而不是MBs),那么这种方法对您来说很好
  • 使用消息传递系统作为传入消息的主要保管者也将为您的线程问题提供答案:在消息队列上使用1-n个并发使用者(即您选择的特定消息传递系统的并发使用者)来处理消息并将结果写入统计数据库
  • 最后,请仔细考虑是否直接公开消息传递系统,而不是在HTTP facade(在您的例子中是JAX-RS)后面,因为并非所有客户机都有能力说出正确的协议(如果您选择RabbitMQ,AMQP具有出色的跨平台支持)。另外,直接暴露它可能会带来安全问题
这里有很多问题:)我将尝试按顺序回答:

  • 您将无法在JavaEE应用程序中嵌入RabbitMQ,因为它在Erlang上运行。如果在JavaEE应用程序中嵌入MessageBroker是您的一项要求,那么您更希望查看ActiveMQ或HornetQ
  • 如果使用消息传递系统的持久存储功能,则无需将传入消息存储在临时数据库中。如果传入的消息很小(KBs而不是MBs),那么这种方法对您来说很好
  • 使用消息传递系统作为传入消息的主要保管者也将为您的线程问题提供答案:在消息队列上使用1-n个并发使用者(即您选择的特定消息传递系统的并发使用者)来处理消息并将结果写入统计数据库
  • 最后,请仔细考虑是否直接公开消息传递系统,而不是在HTTP facade(在您的例子中是JAX-RS)后面,因为并非所有客户机都有能力说出正确的协议(如果您选择RabbitMQ,AMQP具有出色的跨平台支持)。另外,直接暴露它可能会带来安全问题

非常感谢您的详细回答。非常感谢。非常感谢您的详细回答。非常感谢。