什么时候rebus取消订阅?如果订户没有运行,是否有任何内容在一段时间后自动取消订阅?
我遇到过一些情况,当订阅者服务停止了一段时间后,发布者不会继续按照他们的方式发送消息。我可能做错了什么?
答案 0 :(得分:0)
当您bus.Unsubscribe<SomeMessage>()
时,Rebus取消订阅。
如果您遇到订阅者突然不再收到已发布的消息,很可能是因为您的发布商“忘记了”订阅。
您是否使用默认的in-mem订阅存储启动了发布者?因为这不会在重新启动发布者后继续存在。
您几乎总是对使用某种实际持久订阅方式感兴趣,例如, SQL Server要做到这一点:
Configure.With(...)
.(...)
.Subscriptions(s => s.StoreInSqlServer(connectionString, "RebusSubscriptions")
.EnsureTableIsCreated())
.(...)
如果您仍然遇到一个似乎是随机遗忘的订阅者,那么它是否会因为您重命名或移动了事件类而无论如何?
订阅作为(eventType, subscriberInputQueue)
元组存储在发布者的订阅存储中,但eventType
的实际存储可能会因所选订阅存储而异。我可以看到XML订阅存储uses the type's assembly-qualified name作为其关键,而SQL Server订阅存储uses the type's FullName
作为关键 - 所选择的订阅存储可能具有稍微不同的行为(我认为这不是最佳的,但这是抽象设计方式的结果。)
当发布者发布时,它将ask the subscription storage for the subscribers for a given event type,所以正是这种查找由于某种原因并不总是返回订阅者的输入队列。
由于XML订阅存储使用程序集限定名称,因此它对邮件程序集的版本更改也很敏感。
我希望这可以告诉您为什么会遇到订阅量下降的问题:)