java - java中的多线程持久队列

标签 java sql multithreading nosql queue

需要有关架构模块的建议

我有一个监听 PORT 的 PORT Listener。所有收到的请求都需要排队。我有 5 个线程来处理队列。同时,所有传入请求都必须保留,处理时的响应也必须保留。

实现该目标的最佳方法是什么?

请求和响应无法保留在一起,因为在某些情况下我可能必须暂时停止处理几个小时。另一种情况可能是该应用程序失败。我们应该能够从持久存储中恢复队列。

另一个问题是我们无法保证队列的大小。因此从数据库连续获取项目所花费的时间应该更少。有时数据库中可能没有请求。我应该选择 NOSQL 吗?

最佳答案

基本概念是使用持久队列。

您的请求处理程序(例如 Servlet)应将请求转换为 JMS 消息并通过 JMS 队列发送它们。您可以使用ActiveMQ , HornetQ ,或其他。接下来,创建一个消息驱动 Bean 以使用来自该队列的消息。

JMS 队列是持久的,因此如果您的服务器出现故障,您不会丢失任务。 MDB 是可以控制的(例如使用 JMX 或系统属性),因此您可以随时停止处理,并且任务将存储在队列中,直到您再次启用 MDB。

Here is a complete JMS walk-through from Oracle这将逐步向您展示如何操作。

关于java - java中的多线程持久队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11062892/

相关文章:

java,以编程方式断开网络连接

java - 如何从 java 代码中检索报表变量,以检查报表是否没有页面?

c# - 在表格的网站行中显示

sql - 为每个组选择前 (N) 行

javascript - NodeJS 中的 worker 是什么

c# - 使用任务检查互联网连接

java - 包裹 : unable to marshal value android. graphics.Path

java - Derby - java.sql.SQLException : Column 'table.column_name' not found

mysql - 从多个表中获取多个数据

java - 这个循环怎么能退出呢?