#c# #msmq
#c# #msmq
Вопрос:
Кто-нибудь может решить мою проблему?
Я хочу запустить одно событие, когда некоторые данные вставляются в очередь MSMQ, как я могу это сделать?
Комментарии:
1. Почему вы не используете службу триггеров MSMQ?
Ответ №1:
Вы создаете свой экземпляр очереди сообщений и начинаете просматривать его асинхронно:
MessageQueue queue = new MessageQueue( @".PRIVATE$Queue" );
queue.BeginPeek( TimeSpan.Infinite, null, OnMessageAdded);
Зарегистрированный обратный вызов вызывается, когда сообщение было добавлено в очередь. Поскольку вы не объяснили, в чем заключается ваша реальная проблема, я предполагаю, что вы хотите получать информацию о новых сообщениях, добавленных в очередь:
private void OnMessageAdded( IAsyncResult ar )
{
Message peekedMessage = queue.EndPeek(ar);
//Do whatever you want. Raise a new event, process the message, ...
}
Сообщение не удаляется из очереди. Вы можете использовать сообщение, но оно все равно остается в очереди. Итак, если вам не нужно сообщение, вы можете просто вызвать queue.EndPeek(ar);
, не используя результат.
Комментарии:
1. Спасибо за помощь .. Функция, вызванная после получения от MSMQ здесь, если я не ошибаюсь.. Я хочу вызывать функцию, когда что-то вставляется в MSMQ..
2. Извините, пожалуйста, используйте BeginPeek и EndPeek. Я исправлю ответ.
3. Заметил несколько вещей:
TimeSpan.Infinite
не существует в более новых версиях .NET, однакоBeginPeek
метод не работает с бесконечным таймаутом, максимальное значение составляет 50 дней.