2014-10-19 4 views
1

Я пытаюсь написать подразделение работы для NServiceBus, которое будет вызываться до и после каждого обработчика сообщений, чтобы определить время, которое требуется для запуска этого обработчика, и записать его в базу данных.NServiceBus Unit Of Work - получить, какой обработчик называется?

Я смог успешно написать Unit Of Work, но при реализации метода Begin(), как я могу определить, какой обработчик вызывается?

+0

Ваша единица работы обычно не зависит от обработчиков. Зачем вам нужна эта информация? Кроме того, несколько обработчиков могут быть вызваны для одного сообщения, так что бы вы сделали в этом случае? –

+0

То, что я хотел бы сделать, это увидеть, какой обработчик вызывается для сообщения и измеряет время, необходимое для его обработки. Я бы хотел установить s Stopwatch на запуск и остановить его, и если прошедшее время больше, чем X, зарегистрируйте сообщение для моего регистратора. Это возможно? – developer82

+1

Я не уверен, что это такая хорошая идея. Вы будете замедлять обработку ваших сообщений при попытке настроить ваш код. Кроме того, для чего вам требуется измерительная техника уровня обработчика, а не измерения производительности на уровне сообщений? –

ответ

0

Вы можете использовать ServiceInsight для получения такой информации. См. docs on ServiceControl и ServiceInsight для получения дополнительной информации. другим каналом может быть NServiceBus.Performance Counters.

+1

Это обеспечило бы информацию для всего сообщения (и если было более одного обработчика, который обработал это сообщение, это была бы сумма всех из них, плюс время инфраструктуры). –

0

Я хотел бы посмотреть в шаблон декоратора и иметь дело с этим путем инъекции зависимостей

пример https://code.google.com/p/autofac/wiki/AdaptersAndDecorators

Вы можете создать декоратор для интерфейса IHandleMessages и настроить все обработчики сообщений для возврата прокси для реального обработчика сообщений, который добавляет требуемую логику инструментария.

Смежные вопросы