【发布时间】:2011-05-25 10:34:57
【问题描述】:
我需要构建一个 NSB 订阅者,该订阅者将订阅由已经上线的服务发布的消息。该服务是使用包含我要订阅的 NSB IMessage 实现的消息程序集构建的。所以要建立我的订阅者,我需要对这个程序集有一个硬依赖。
当我的订阅者启动时,它会向发布者输入队列发送一些消息,从而导致发布者将我的订阅记录在数据库中。我的订阅之一如下所示:
MyNamespace.MyMessageType, MyNamespace, Version=1.0.0.0, Culture=neutral, PublicKeyToken=MyPublicKeyToken
不幸的是,发布者正在从非强命名的程序集发布消息。因此,在发布时,订阅评估过程无法针对我的订阅成功评估,因为正在发布的消息的公钥令牌(值 = null)与我的订阅不匹配。
我的问题是:我不能只按类型和版本订阅消息吗?更好的是 - 我可以不订阅基于某些外部合同(如 XSD)的消息并完全打破这种依赖关系吗?
非常感谢。
更新:NSB 文档在这里暗示了这样的事情:
【问题讨论】:
-
是否有一个强大的商业案例,为什么消息程序集必须是强命名的?
-
好吧,这不是商业案例,但总的来说,进入具有强命名代码的生产环境会更安全。如果此依赖项是第三方的(不是),那么我将遇到真正的问题,因为我不知道程序集是否来自受信任的来源。不过我知道你在说什么。事实上,我并没有因此而受阻,因为我已经要求开发消息的团队简单地签署消息程序集。但是我的帖子仍然有效。使用 NSB pubsub 时,您将始终对发布者有硬依赖,如果您仅使用 Bus.Send(),则不存在这种依赖。
标签: nservicebus publish-subscribe