Rebus自动取消订阅?

时间:2015-02-12 13:08:24

标签: rebus

什么时候rebus取消订阅?如果订户没有运行,是否有任何内容在一段时间后自动取消订阅?

我遇到过一些情况,当订阅者服务停止了一段时间后,发布者不会继续按照他们的方式发送消息。我可能做错了什么?

1 个答案:

答案 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订阅存储使用程序集限定名称,因此它对邮件程序集的版本更改也很敏感。

我希望这可以告诉您为什么会遇到订阅量下降的问题:)