rebus 什么时候取消订阅?如果订阅者没有运行,是否有任何东西会在一段时间后自动取消订阅?
我遇到过一些情况,当订阅者服务停止一段时间后,发布者不会继续以他们的方式发送消息。我可能做错了什么?
rebus 什么时候取消订阅?如果订阅者没有运行,是否有任何东西会在一段时间后自动取消订阅?
我遇到过一些情况,当订阅者服务停止一段时间后,发布者不会继续以他们的方式发送消息。我可能做错了什么?
当您取消订阅时,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 订阅存储使用程序集限定名称,因此它也会对消息程序集的版本更改敏感。
我希望这可以让您了解为什么您会遇到订阅下降的情况:)