0

架构模块所需的建议

我有一个监听端口的端口监听器。所有收到的请求都需要排队。我有 5 个线程来处理队列。同时,所有传入的请求都必须被持久化,处理相同的响应也是如此。

实现它的最佳方法是什么?

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

另一个问题是我们不能保证队列的大小。因此从 db 中连续获取项目所需的时间应该更少。有时可能在 DB 中没有请求。我应该选择 NOSQL 吗?

4

1 回答 1

1

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

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

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

这是来自 Oracle 的完整 JMS 演练,将逐步向您展示如何执行此操作。

于 2012-06-16T13:02:52.727 回答