Как я могу сделать так, чтобы MSMQ автоматически истекал сообщениями, если они ожидали в очереди дольше, чем, скажем, 30 минут?
У нас нет контроля над системой, которая создает эти сообщения, чтобы установить MaxTimeToReceive
свойство сообщений.
Вы не можете.
Таймауты всегда устанавливаются, когда приложение создает сообщение. Значение либо предоставляется кодом, либо берется из значений по умолчанию диспетчера очередей отправителя. После установки и отправки готово.
Если у вас нет контроля над системой, отправляющей сообщения, вам не повезло, и вам придется предоставить ручной метод очистки старых сообщений.
Ура
Джон Брейквелл
Возможно, это уже слишком поздно для вопроса Нишкара, но может быть полезно кому-то другому.
Как сказал Джон, вы не можете изменить свойства сообщения после его отправки. Поэтому, если вам нужно что-то подобное, единственное решение - использовать еще одну промежуточную очередь, в которой вы могли бы читать сообщения, изменять все, что хотите, и отправлять их в исходную очередь назначения. Поскольку это простая обработка, она должна работать быстро и не сокращать ваше 30-минутное время на получение. Следует отметить, что окончательное сообщение не будет идентично исходному. Помимо этих свойств, которые вы изменяете, MSMQ также установит новый идентификатор сообщения, время отправки и т. Д.
Это дополнительный шаг, но он может быть решением, если у вас нет другого выхода.