1

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

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

4

1 回答 1

0

当您取消订阅时,Rebus 会取消订阅bus.Unsubscribe<SomeMessage>()

如果您遇到订阅者突然不再收到已发布的消息,很可能是因为您的发布者以某种方式“忘记”了订阅

您是否使用默认的 in-mem 订阅存储启动发布者?因为这将无法在发布者重新启动后继续存在。

您几乎总是会对以某种方式实际持久化订阅感兴趣,例如使用 SQL Server 来做到这一点:

Configure.With(...)
    .(...)
    .Subscriptions(s => s.StoreInSqlServer(connectionString, "RebusSubscriptions")
                         .EnsureTableIsCreated())
    .(...)

如果您仍然遇到似乎被随机遗忘的订阅者,是否有可能是因为您已重命名或移动了事件类?

订阅作为(eventType, subscriberInputQueue)元组存储在发布者的订阅存储中,但实际存储eventType可能因所选订阅存储而异。我可以看到 XML 订阅存储使用类型的程序集限定名称作为其键,而 SQL Server 订阅存储使用类型FullName作为键 - iow 选择的订阅存储可能具有稍微不同的行为(我认为这不是最佳的,但这是抽象设计方式的结果)。

当发布者发布时,它会向订阅者请求订阅存储以获取给定的事件类型,因此由于某种原因,这种查找并不总是返回订阅者的输入队列。

由于 XML 订阅存储使用程序集限定名称,因此它也会对消息程序集的版本更改敏感。

我希望这可以让您了解为什么您会遇到订阅下降的情况:)

于 2015-02-13T10:43:08.783 回答