NServiceBus: обработка сообщений по запросу

Я просто новичок в служебных шинах (в частности, NServiceBus) и только что написал свою первую сагу.

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

Я не смог найти какие-либо методы в IBus на nhibernate, чтобы разрешить получение следующего доступного сообщения по запросу, поскольку кажется, что все основано на push. Поэтому я создал прототип пользовательского интерфейса, который вручную извлекает сообщения из MSMQ с помощью стандартного API .NET System.Messaging.MessageQueue и позволяет пользователю взаимодействовать с этим, а затем отправлять ответ обратно в сагу, записывая ответ обратно через IBus. Метод Отправить().

Мой главный вопрос в связи с этим: нарушает ли это фундаментальные принципы NServiceBus? а если нет, то можно ли это сделать через NServiceBus API?

Также вы будете обрабатывать параллелизм через MSMQ или через приложение пользовательского интерфейса?

Ваше здоровье


person zonkflut    schedule 15.06.2011    source источник


Ответы (1)


Все в NSB намеренно однонаправлено по целому множеству причин. Чтобы уведомить своих клиентов о том, что им нужно что-то сделать, вы можете опросить модель представления, чтобы узнать, есть ли работа, которую нужно выполнить на каком-то интервале. Saga будет отвечать за вставку/обновление правильных строк, чтобы пользовательский интерфейс мог их подобрать. После завершения пользовательского интерфейса вы можете использовать NSB для отправки () сообщения обратно в Saga. Если это веб-интерфейс, ознакомьтесь с образцом AsyncPages в загружаемом файле.

Другой способ сделать это — отправить сообщение клиенту, предполагая, что обмен сообщениями установлен вместе с клиентом. Вам нужно будет создать своего рода насос сообщений в фоновом режиме. Опять же, как только работа будет завершена, подойдет простая функция Send().

person Adam Fyles    schedule 15.06.2011