架构模块所需的建议
我有一个监听端口的端口监听器。所有收到的请求都需要排队。我有 5 个线程来处理队列。同时,所有传入的请求都必须被持久化,处理相同的响应也是如此。
实现它的最佳方法是什么?
请求和响应不能同时存在,因为有时我必须暂时停止处理几个小时。另一种情况可能是此应用程序失败。我们应该能够从持久存储中恢复队列。
另一个问题是我们不能保证队列的大小。因此从 db 中连续获取项目所需的时间应该更少。有时可能在 DB 中没有请求。我应该选择 NOSQL 吗?
架构模块所需的建议
我有一个监听端口的端口监听器。所有收到的请求都需要排队。我有 5 个线程来处理队列。同时,所有传入的请求都必须被持久化,处理相同的响应也是如此。
实现它的最佳方法是什么?
请求和响应不能同时存在,因为有时我必须暂时停止处理几个小时。另一种情况可能是此应用程序失败。我们应该能够从持久存储中恢复队列。
另一个问题是我们不能保证队列的大小。因此从 db 中连续获取项目所需的时间应该更少。有时可能在 DB 中没有请求。我应该选择 NOSQL 吗?
基本概念是使用持久队列。
您的请求处理程序(例如 Servlet)应将请求转换为 JMS 消息并通过 JMS 队列发送它们。您可以使用ActiveMQ、HornetQ或其他。接下来,创建一个使用来自该队列的消息的消息驱动 Bean。
JMS 队列是持久的,因此如果您的服务器出现故障,您不会丢失任务。可以控制 MDB(例如使用 JMX 或系统属性),因此您可以随时停止处理,并且任务将存储在队列中,直到您再次启用 MDB。
这是来自 Oracle 的完整 JMS 演练,将逐步向您展示如何执行此操作。