gpt4 book ai didi

nservicebus - 如何取消延迟的 NServiceBus 消息?

转载 作者:行者123 更新时间:2023-12-04 03:16:20 27 4
gpt4 key购买 nike

假设我使用延迟消息传递功能在将来的某个时间点发送消息,但稍后我可能想取消该消息。

问题 1 - 进行原始 bus.Defer(...) 调用时,如何为该消息取回唯一标识符?我希望有消息 ID 或某种超时 ID。

问题 2 - 除了直接调用 RavenDB 数据库之外,有没有办法查询总线以取回所有未决的延迟消息?

问题 3 - 有什么方法可以取消延迟的消息吗?我希望像 bus.CancelDeferred(messageid)

这样的东西

这些是否可用,或者我可以使用任何其他机制来实现类似的结果吗?

最佳答案

我有几次需要放弃延迟的消息和未完成的回复,我通过在我的 saga 中“增​​加相关 ID”来做到这一点。你没有提到传奇,所以我不确定这个解决方案是否对你有用。但是,我确实认为它属于您要求的“任何其他机制”:)

看看这个例子 - 这里有我的 saga 的状态,其中包含一个自定义 CorrelationId:

public class MySagaData : ISagaData
{
// ... the usual stuff here

public string CorrelationId { get; set; }
}

然后,每次我延迟一条消息或请求某些东西时,我将延迟的消息和/或回复与关联 ID 的当前值相关联:

bus.Defer(time, new Something { CorrelationId = Data.CorrelationId });

bus.Send(new SomeRequest { CorrelationId = Data.CorrelationId });

因此在概念上将延迟消息和回复与 saga 的当前状态相关联

然后,如果我想放弃所有未完成的消息,我只需将 saga 的相关 ID 重新设置为一个新值——我通常将该值设置为类似于 somethingWithBusinessMeaning/timestamp 的值。

这样,废弃的消息将不会与任何 saga 实例相关联,从而有效地被忽略。

有道理吗?

关于nservicebus - 如何取消延迟的 NServiceBus 消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13242158/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com