Rebus:如何在应用所有相关事件时进行拦截

Rebus: how to intercept when all correlated events are applied

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

我不完全确定您要实现的目标,但如果我理解正确的话,您只是在问如何知道何时处理了几条特定的消息。

在很多情况下,这可以通过在每个订阅者中实现类似于以下的逻辑来解决:

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.

进行关联

如果所有订阅者都这样做,那么 saga 可以很容易地确定这个过程已经进行了多远,然后在所有订阅者都完成了他们的事情后找出最后要做的事情。