我正在开发一个系统,其中订阅的生命周期是通过状态机处理的,我正在将NServiceBus视为状态之间转换管理的替代。
示例
客户拥有有效的互联网订阅,并希望将来3个月取消订阅。
当前解决方案
在数据库中创建转换,例如
tranistionId: 10000,
subscriptionId: 1337,
transition: "execute-inactivation"
due-date: {current date + 3 months}
每隔10秒扫描一次表,看是否有任何新的/到期转换。
NServiceBus
我认为可以用以下方法复制当前的解决方案:
Schedule.Every(TimeSpan.FromSeconds(5)).Action(() =>
{
Bus.Send<CheckForDueTransitions>();
});
但这不会消除对数据库的干扰问题。
另一个重要特征是可以中止排队转换,例如取消取消。
我的问题是否有首选的NServiceBus解决方案?
答案 0 :(得分:2)
我建议查看NServiceBus Sagas。您可能会认为每个订阅都是自己的长期运行过程(Saga实例),并使用Timeout Manager来管理它们。然后,您可以使用超时功能按需自动取消订阅,或者如果用户扩展其订阅,则为该订阅创建新的超时到新的到期日期。