Обеспечить / проверить доставку сообщений с помощью MSMQ (C #) - PullRequest
0 голосов
/ 30 августа 2009

Как «проверить», что сообщение, отправленное с использованием MSMQ в частную локальную очередь, действительно доставлено? Я особенно думаю о сценарии, где слушатель (служба C # в моем случае) не работает, и поэтому доставка не может быть успешной.

Ответы [ 4 ]

3 голосов
/ 30 августа 2009

Вы можете только гарантировать, что он сможет попасть в очередь без дополнительных действий. Чтобы справиться со сценарием «не работает получатель», вам нужно будет написать код получателя, чтобы отправить сообщение обратно на сервер, когда он обрабатывает сообщение. Исходный отправитель будет отвечать за отслеживание отправленных сообщений и проверку того, что клиент их получил.

Это одно из решений, которое вам следует принять при принятии решения о том, использовать или нет MSMQ, а не сценарий удаленного взаимодействия или веб-службы. Например, у нас был проект, используемый для уведомления всех наших розничных магазинов, когда возникла чрезвычайная ситуация (например, отзыв продукта / проблема с безопасностью пищевых продуктов). Нам нужно было сразу же узнать, работает ли прослушиватель магазина, поэтому мы выбрали удаленное взаимодействие и когда отправитель получил сообщение об ошибке, указывающее, что один из слушателей не слушал, нам нужно будет взять трубку и позвонить.

Просто что-то иметь в виду.

Редактировать - уточнение

Я действительно выдавал два варианта выше.

  1. Код клиента для отправки сообщения отправителю при получении сообщения.
  2. Используйте другой параметр, например удаленное взаимодействие, где вы можете определить, работает ли клиент и получает ли оно сообщение.
1 голос
/ 09 сентября 2009

Когда вы отправляете сообщение, вы можете указать тип AcknowledgeType, который позволит вам выяснить (с помощью положительного или отрицательного подтверждения), достигло ли сообщение очередь и / или было ли получено из очереди. MSMQ отправляет подтверждения в виде сообщений в AdministrativeQueue, поэтому убедитесь, что вы присвоили это свойство объекту Message.

Вы можете проверить административную очередь для подтверждений по идентификатору корреляции, который является идентификатором исходного сообщения.

1 голос
/ 30 августа 2009

Вы, вероятно, можете получить эту информацию, используя административные очереди

1 голос
/ 30 августа 2009

Он всегда отправляется в очередь.

Если ваша служба не работает для ее получения, она просто сидит там, терпеливо ожидая, пока ее не получат.

Вы знаете, что оно было отправлено в очередь, потому что .Send () возвращается без сбоев.

...