收到所有响应时,Java,JMS关闭连接。

时间:2017-01-02 08:58:35

标签: java jms response

我在计算来自响应队列的响应时遇到问题。我的意思是,每天我们运行一次从db收集一些数据并将它们发送到队列的作业。当我们收到所有响应时,我们应该关闭连接。问题是我们如何检查所有响应是否到达?由于并发问题,将其保留在全局变量中是有风险的。任何的想法 ?我是JMS的新手,所以也许解决方案显而易见但我没有看到它。

1 个答案:

答案 0 :(得分:0)

我不知道你的筹码是什么,或者你可能用什么工具来完成这个但是我已经考虑到了这一点,这可能会帮助你(希望如此)。

  1. 为您计划排队的每个作业生成一个哈希值,并将其存储在并发列表/映射中。 (即:ConcurrentHashMap
  2. 将作业发送到队列。
  3. 完成作业并发回响应后,重现哈希并将其存储为一个单独的并发列表/地图,其中包含已完成的所有作业。
  4. 现在您有两个应该执行的所有作业列表以及您从中获得响应的作业。有多种方法可以实现这一目标。如果您查找Java Concurrency,您会发现大量的教程和文档。我喜欢使用CyclicBarrier and CountDownLatch`。如果计划使用任何这些方法,请采取额外的预防措施,以防止您的应用程序挂起或更糟,一个肮脏的内存泄漏。

    或者,你可以简单地检查你有多少排队请求和响应,如果它们彼此相等,则断开连接。