У меня проблема с подсчетом ответов от очереди ответов. Я имею в виду, что один раз в день мы запускаем задание, которое собирает данные из db и отправляет их в очередь. Когда мы получаем все ответы, мы должны отключить соединение. Проблема в том, как мы можем проверить, пришли ли все ответы? Сохранение этого в глобальной переменной является рискованным из-за проблемы совпадения. Есть идеи ? Я совершенно новый в JMS, поэтому, возможно, решение очевидно, но я не вижу его.Java, JMS shutdown подключение когда получать все отклик.
ответ
Я не знаю, что ваш стек или какие инструменты вы могли бы использовать для достижения этого, но я помню это, и это может помочь вам (надеюсь).
- Создайте хэш для каждого задания, которое вы планируете в очереди и храните его в параллельном списке/карте. (т. е .:
ConcurrentHashMap
) - Отправьте задание в очередь.
- После того, как задание выполнено и отправит ответ, воспроизведите хэш и сохраните его в отдельном параллельном списке/карте, где хранятся все выполняемые задания.
Теперь у вас есть два списка всех заданий, которые должны быть выполнены, и задания, на которые вы получили ответ. Есть несколько способов сделать это. Если вы посмотрите Java Concurrency
, вы найдете множество учебников и документации. Мне нравится использовать CyclicBarrier and
CountDownLatch`. Если вы планируете использовать какой-либо из этих методов, примите дополнительные меры предосторожности, чтобы предотвратить зависание вашего приложения или что-то еще, грязную утечку памяти.
ИЛИ, вы можете просто проверить, сколько запросов и ответов в очереди вы имеете, и если они равны друг другу, отбросьте соединение.
привет спасибо за быстрый ответ, я использую весенний ботинок с JMS (внедрение IBM MQ) – user3528733