Как реализовать триггеры MSMQ

#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 дней.