Java,JMS 在收到所有响应后关闭连接。
Java, JMS shutdown connection when receive all response.
我在计算响应队列中的响应时遇到问题。我的意思是,我们每天 运行 一次从数据库收集一些数据并将它们发送到队列的作业。当我们收到所有响应时,我们应该关闭连接。问题是我们如何检查是否所有响应都到达了?由于并发问题,将其保存在全局变量中是有风险的。任何想法 ?我是 JMS 的新手,所以解决方案可能很明显,但我没有看到。
我不知道你的堆栈是什么,也不知道你可能使用什么工具来完成这个,但我已经记住了这一点,这可能会帮助你(希望)。
- 为您计划排队的每个作业生成哈希并将其存储在并发 list/map 中。 (即:
ConcurrentHashMap
)
- 将作业发送到队列。
- 作业完成并发回响应后,重新生成哈希并将其存储在单独的并发 list/map 中,其中包含所有已完成的作业。
现在您已经有了两个列表,其中列出了所有应该执行的作业以及您从中得到响应的作业。有多种方法可以实现这一点。如果您查找 Java Concurrency
,您会发现大量教程和文档。我喜欢使用 CyclicBarrierand
CountDownLatch`。如果计划使用这些方法中的任何一种,请采取额外的预防措施,以防止您的应用程序挂起或更糟的是,发生肮脏的内存泄漏。
或者,您可以简单地检查您有多少排队请求和响应,如果它们彼此相等,则断开连接。
我在计算响应队列中的响应时遇到问题。我的意思是,我们每天 运行 一次从数据库收集一些数据并将它们发送到队列的作业。当我们收到所有响应时,我们应该关闭连接。问题是我们如何检查是否所有响应都到达了?由于并发问题,将其保存在全局变量中是有风险的。任何想法 ?我是 JMS 的新手,所以解决方案可能很明显,但我没有看到。
我不知道你的堆栈是什么,也不知道你可能使用什么工具来完成这个,但我已经记住了这一点,这可能会帮助你(希望)。
- 为您计划排队的每个作业生成哈希并将其存储在并发 list/map 中。 (即:
ConcurrentHashMap
) - 将作业发送到队列。
- 作业完成并发回响应后,重新生成哈希并将其存储在单独的并发 list/map 中,其中包含所有已完成的作业。
现在您已经有了两个列表,其中列出了所有应该执行的作业以及您从中得到响应的作业。有多种方法可以实现这一点。如果您查找 Java Concurrency
,您会发现大量教程和文档。我喜欢使用 CyclicBarrierand
CountDownLatch`。如果计划使用这些方法中的任何一种,请采取额外的预防措施,以防止您的应用程序挂起或更糟的是,发生肮脏的内存泄漏。
或者,您可以简单地检查您有多少排队请求和响应,如果它们彼此相等,则断开连接。