Rebus:当应用所有相关事件时如何拦截

时间:2017-06-06 15:27:45

标签: rebus

我想知道当所有“子”事件(具有特定相关ID的所有事件)都已执行时,是否有一种简单的方法可以通知ReBus。

1 个答案:

答案 0 :(得分:2)

我不完全确定你想要实现的目标,但如果我理解你的话,你只是想知道如何处理几个特定的​​消息。

在许多情况下,这可以通过在每个订户中实现与此类似的逻辑来解决:

public class SomeSubscriberHandler : IHandleMessages<AnEvent>
{
    public async Task Handle(AnEvent anEvent)
    {
        // handle event by doing something
        // ...

        // let the world know I did something
        await _bus.Publish(new SomeSubscriberDidSomething(anEvent.CorrelationId));
    }      
}

从而允许saga订阅SomeSubscriberDidSomething,并通过随附的CorrelationId进行关联。

如果所有订阅者都这样做,那么传奇可以很容易地确定这个过程到底有多远,然后在所有订阅者完成他们的事情时找出最后要做的事情。