处理失效的延迟(超时)消息?

Handling defunct deferred (timeout) messages?

我是 Rebus 的新手,正在尝试跟上我们目前在 Azure 逻辑应用程序中使用的一些模式的速度。当前的目标实现将使用带有 Saga 存储的 Azure 服务总线,最好是在 Cosmos DB 中(仍在研究该示例实现)。甚至可以使用 Mongo DB API 将 Rebus Mongo DB 与 Cosmos DB 一起使用(尽管不确定这是否可能)。

我们的一个主要用例是 event/timeout 模式,在阅读 samples/forums/Stack Overflow 之后,这种情况并不少见。棘手的部分是我们的 Sagas 更像是一个有限状态机而不是一个有向无环图。这主要是因为日期在外部发生了变化,因此事件超时发生了变化。

Defer() 方法没有 return 超时标识符,我们认为这是一个实现限制(Azure 服务总线 return 很长)。由于我们必须忽略为现在已经及时转移的事件安排的超时,我们看到了一种“忽略”这些超时的方法(因为它们不能被取消)如下:

这是在正确的轨道上,还是有更多 'correct' 处理失效超时(延迟)消息的方法?

你走在正确的轨道上

I don't believe this needs to be a concurrent dictionary but that is why I am here...

Rebus 让您的 saga 处理程序处理它自己的 saga 数据副本(使用乐观并发),因此您可以自由地对 saga 数据建模,就好像它一次只能被一个人访问一样。