2012-09-11 9 views
4

Я использую NServiceBus в качестве служебной шины службы, в решении, которое я разрабатываю, у меня есть служба оркестровки, которая получает до 10 тыс. Сообщений от всех клиентских приложений. Я хотел бы улучшить производительность архитектуры и, следовательно, улучшить предоставляемое решение.nservicebus одновременный доступ к данным саги

Я использую класс данных Saga, и я хотел бы предоставить доступ к нему между всеми рабочими потоками (до сих пор я устанавливаю только один поток, но я хочу установить как минимум 10), что происходит, когда несколько потоков попытаться получить доступ к одному и тому же саге? NSB уже предоставляет такую ​​функцию параллелизма? Нужно ли мне это реализовать самостоятельно? если последние намеки?

Заранее спасибо

ответ

6

Если я правильно вас понимаю, вы спрашиваете, что произойдет, если у вас есть несколько потоков, обращающихся к одному и тому же экземпляру саги одновременно. NServiceBus использует базовое хранилище, чтобы убедиться, что только один поток может одновременно создавать или обновлять данный экземпляр саги. Другие откатываются, а поддержка NServiceBus для повторных попыток будет проверять повторение сообщения и тем самым разрешать условия гонки для вас. Вы можете прочитать здесь:

http://andreasohlund.net/2012/09/19/nservicebus-sagas-and-concurrency/

1

Его маловероятно, что вы бы несколько саг обмена одни и те же данные экземпляра, его просто не так, как они предназначены для работы. Сага - пример долгого процесса. Класс данных саги - это всего лишь конструкция, которая позволяет хранить информацию об этом экземпляре, которая помогает управлять своим состоянием за всю его жизнь. Если вы хотите повысить производительность, я бы порекомендовал вам взглянуть на распределение конечных точек вашего рабочего (http://docs.particular.net/samples/scaleout/).