2017-01-02 9 views
0

У меня проблема с подсчетом ответов от очереди ответов. Я имею в виду, что один раз в день мы запускаем задание, которое собирает данные из db и отправляет их в очередь. Когда мы получаем все ответы, мы должны отключить соединение. Проблема в том, как мы можем проверить, пришли ли все ответы? Сохранение этого в глобальной переменной является рискованным из-за проблемы совпадения. Есть идеи ? Я совершенно новый в JMS, поэтому, возможно, решение очевидно, но я не вижу его.Java, JMS shutdown подключение когда получать все отклик.

ответ

0

Я не знаю, что ваш стек или какие инструменты вы могли бы использовать для достижения этого, но я помню это, и это может помочь вам (надеюсь).

  1. Создайте хэш для каждого задания, которое вы планируете в очереди и храните его в параллельном списке/карте. (т. е .: ConcurrentHashMap)
  2. Отправьте задание в очередь.
  3. После того, как задание выполнено и отправит ответ, воспроизведите хэш и сохраните его в отдельном параллельном списке/карте, где хранятся все выполняемые задания.

Теперь у вас есть два списка всех заданий, которые должны быть выполнены, и задания, на которые вы получили ответ. Есть несколько способов сделать это. Если вы посмотрите Java Concurrency, вы найдете множество учебников и документации. Мне нравится использовать CyclicBarrier and CountDownLatch`. Если вы планируете использовать какой-либо из этих методов, примите дополнительные меры предосторожности, чтобы предотвратить зависание вашего приложения или что-то еще, грязную утечку памяти.

ИЛИ, вы можете просто проверить, сколько запросов и ответов в очереди вы имеете, и если они равны друг другу, отбросьте соединение.

+0

привет спасибо за быстрый ответ, я использую весенний ботинок с JMS (внедрение IBM MQ) – user3528733

 Смежные вопросы

  • Нет связанных вопросов^_^