У нас есть настройка MSMQ Queue, которая получает сообщения и обрабатывается приложением. Мы бы хотели, чтобы другой процесс подписался на очередь, просто прочитал сообщение и зарегистрировал его содержимое.
У меня это уже есть, проблема в том, что он постоянно заглядывает в очередь. Процессор на сервере, когда он работает, составляет около 40%. Mqsvc.exe работает на 30%, а это приложение работает на 10%. Я предпочел бы иметь что-то, что просто ожидает прихода сообщения, получает уведомление об этом, а затем регистрирует его без постоянного опроса сервера.
Dim lastid As String
Dim objQueue As MessageQueue
Dim strQueueName As String
Public Sub Main()
objQueue = New MessageQueue(strQueueName, QueueAccessMode.SendAndReceive)
Dim propertyFilter As New MessagePropertyFilter
propertyFilter.ArrivedTime = True
propertyFilter.Body = True
propertyFilter.Id = True
propertyFilter.LookupId = True
objQueue.MessageReadPropertyFilter = propertyFilter
objQueue.Formatter = New ActiveXMessageFormatter
AddHandler objQueue.PeekCompleted, AddressOf MessageFound
objQueue.BeginPeek()
end main
Public Sub MessageFound(ByVal s As Object, ByVal args As PeekCompletedEventArgs)
Dim oQueue As MessageQueue
Dim oMessage As Message
' Retrieve the queue from which the message originated
oQueue = CType(s, MessageQueue)
oMessage = oQueue.EndPeek(args.AsyncResult)
If oMessage.LookupId <> lastid Then
' Process the message here
lastid = oMessage.LookupId
' let's write it out
log.write(oMessage)
End If
objQueue.BeginPeek()
End Sub