Повторная попытка сообщения с тайм-аутом - PullRequest
0 голосов
/ 13 февраля 2020

Мы должны создать приложение-ответчик как windows сервис, который будет забирать сообщения из очереди, подтверждать отправителя, что мы их получили, и что они проверены, отправив ответ в течение 5 секунд. После того, как мы получили еще одно подтверждение от отправителя, что мы можем обработать сообщение, мы обрабатываем сообщение и отправляем результат этого запроса обратно ему в другом (5 se c). Если в какой-то момент в этом цикле они или мы не получим сообщение из очереди и не ответят в течение отведенного ему времени, срок действия сообщения истечет, и нам нужно будет повторить попытку сообщения.

Что мы имеем проблема с определением, когда сообщения истекают и должны быть отправлены повторно. Я читал о том, чтобы поместить их в очередь очередь , но я не уверен, что цель этого соответствует тому, что нам нужно. Очередь недоставленных сообщений не предназначена для элементов, которые просто прервались, но потерпели неудачу при передаче. Я также читал об использовании опции Report на самом MQMessage для генерации отчета и, возможно, перемещения его в другую очередь, которую можно отслеживать. Затем нам нужно будет повторить попытку элементов, находящихся в новой очереди.

Это мои единственные два варианта, если мне нужно отслеживать каждое входящее и исходящее сообщение, чтобы убедиться, что мы получаем ответ от другого MQ сервер, с которым мы общаемся?

1 Ответ

1 голос
/ 16 февраля 2020

Я бы сделал это с истечением срока действия сообщения и отчетами об активности в MQ, но это не делает ненужными для ваших приложений ведение журнала того, что они отправили и получили.

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

Однако отброшенное сообщение не будет помещено в какую-либо очередь, отправляющему приложению необходимо иметь возможность повторно отправить сообщение с нуля.

И на стороне обработки, когда оно ожидает 2-го сообщения, для его обработки потребуется собственный «таймер».

https://www.ibm.com/support/knowledgecenter/en/SSFKSJ_9.1.0/com.ibm.mq.ref.dev.doc/q097490_.htm

https://www.ibm.com/support/knowledgecenter/en/SSFKSJ_9.1.0/com.ibm.mq.mon.doc/q036600_.htm

Все это говорит, мне кажется, что вы не используете MQ по назначению и пытаетесь имитировать c синхронную связь. MQ может гарантировать ровно один раз доставки, поэтому я бы сказал, что если у вас есть правильно настроенный и размерный маршрут MQ между вашими приложениями и правильно настроен мониторинг сообщений, то все эти подтверждения / подтверждения не нужны.

...