2015-09-08 3 views
3

У меня есть несколько RebusHandlers как:Доменные события с Ребус и eventlisteners в NHibernate

public class CastleRebusHandler : IHandleMessages<CastleRebusMessage> 
{ 
    ... (ctor injections from windsor) 

    public void Handle(CastleRebusMessage message) 
    { 
     var myPoco = _session.Get<MyPoco>(1); 
     myPoco.MethodThatRaiseDomainEvent(); 
    } 
} 

Метод MethodThatRaiseDomainEvent добавляет событие домена внутренний список, как описано here.

Я установил IPostUpdateEventListener в NHibernate, который будет запускаться через коллекцию событий домена и отправлять их каждый. Я создал класс, который должен контролировать ISession для событий Rebus на события BeforeMessage и AfterMessage.

Код события отправки домена (как описано в ссылке), в списке событий NHibernate = AfterMessage в Rebus. Проблема в том, что, если здесь возникает исключение?

Как переместить сообщение в очередь ошибок Rebus, чтобы сигнализировать о сбое?

Мы используем версию 0.83

Кена

+0

Ребус должен переместить сообщение ошибки очереди после того, как п не удалось попыток (5 по умолчанию). Его можно настроить так, как показано здесь: https://github.com/rebus-org/Rebus/wiki/Automatic-retries-and-error-handling. Если в вашем обработчике возникает исключение, например, в обработчике, оно рассматривается как сбой. – user1121956

ответ

1

Ребус имеет блок механизм работы, который вы должны хуком сессии совершить действие в - вы делаете это с помощью

Configure.With(...) 
    .(...) 
    .Events(e => e.AddUnitOfWorkManager(...)) 
    .(...) 

где вы может поставлять менеджер uow, который выполняет эту работу. Задачей отдела работы менеджера является создание IUnitOfWork, в котором вы можете вызывать фиксацию и откат сопроводительной транзакции вашего сеанса.

Я надеюсь, что имеет смысл :)

+0

Спасибо, так что если в событии 'AfterMessage' вызывается исключение, это вызовет' Abort' в менеджере UnitOfWork? – Ken

+0

Думаю, да, но (конечно, конечно, не зная всех деталей вашей проблемы). Я думаю, что было бы более естественным выполнить логику, имеющуюся в 'AfterMessage', теперь внутри' Commit' единицы работы – mookid8000

+1

Да , Я реализовал класс с 'IUnitOfWork' и обработал управление сеансами. Работала отлично и отбросила события «AfterMessage» и «BeforeMessage» – Ken

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