0

我正在开发一个系统,其中订阅的生命周期由状态机处理,我正在寻找 NServiceBus 作为状态之间转换管理的替代品。

例子

客户有一个有效的互联网订阅,并希望在未来 3 个月内取消它。

当前解决方案

在数据库中创建一个转换,例如

tranistionId: 10000,
subscriptionId: 1337,
transition: "execute-inactivation"
due-date: {current date + 3 months}

该表每 10 秒扫描一次,以查看是否有任何新的/到期的转换。

服务总线

我认为可以通过以下方式复制当前的解决方案:

Schedule.Every(TimeSpan.FromSeconds(5)).Action(() => 
{ 
    Bus.Send<CheckForDueTransitions>(); 
});

但这不会消除对数据库的喋喋不休的问题。

另一个重要特性是可以中止排队的转换,例如取消取消。

是否有针对我的问题的首选 NServiceBus 解决方案?

4

1 回答 1

2

我建议看看NServiceBus Sagas。您可能会认为每个订阅都是它自己的长期运行进程(Saga 实例),并使用超时管理器来管理它们。然后,您可以使用超时功能按需自动取消您的订阅,或者如果用户延长他们的订阅,则为该订阅创建一个新的超时到新的到期日期。

于 2013-04-14T09:40:25.530 回答