rebus - 如何避免对 rebus 消息的编译时依赖性?

标签 rebus

我想通过上下文 A 引发的事件集成两个限界上下文并使用来自上下文 B 的事件。 我怎么想避免编译时间依赖性,所以上下文 B 不必包含上下文 A 的 dll/库。(至少我不希望每次新事件类型获取时都需要更新对 A 的引用的麻烦由上下文 A 公开。

Rebus 是否有任何首选/最佳实践?

最佳答案

实际上有几种方法:)

就我而言,我更喜欢将消息作为单独的 NuGet 包分发——然后就需要查看 packages.config 了查看每个端点有哪些依赖项。

只要我保持发布的消息模式不可变(即遵循严格的仅附加方法来改进它),使用事件就没有问题——当反序列化为旧版本的消息模式时,数据会被简单地截断。

但如果您希望端点的耦合度低于此,您可以做几件事。

除非您更改序列化程序,否则消息将序列化为 UTF8 编码的 JSON。这意味着订阅者总是可以安装自己的 JSON 序列化器,例如将消息反序列化为它自己的类型,或者简单地反序列化为 JObject (假设您使用的是 Newtonsoft JSON.NET)。

事实上——如果我没记错的话——你可以包含 NuGet 包 Rebus.NewtonsoftJson并通过去使用它

Configure.With(new CastleWindsorContainerAdapter(container))
    .(...)
    .Serialization(s => s.UseNewtonsoftJson())
    .Start();

它带来了 Newtonsoft 的 JObject混合,然后您可以通过实现 IHandleMessages<JObject> 在您的消息处理程序中使用它.

希望这能给你一些启发:)

关于rebus - 如何避免对 rebus 消息的编译时依赖性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41763905/

相关文章:

c# - 一个工作单元内多个消息的相同 Rebus 处理程序实例

publish-subscribe - Rebus 无法订阅具有相同 'messages' 值的多个端点

rebus - 使用 Rebus 将错误消息从错误队列移回原始队列

rebus - Rebus 中必须按顺序传递的消息的策略

rebus - 如何使用位于不同程序集中的 DTO 副本在两个微服务之间实现 Rebus 订阅/发布?

ssl - Rebus:无法使用装饰器深度 0 解析 Rebus.Bus.IBus - 注册:Rebus.Injection.Injectionist+Handler”

rebus - 使用 Azure 服务总线处理 Rebus 中的发布/订阅

rebus - 在 Rebus 中延迟发布消息

synchronization - Rebus - 发送命令并等待处理程序

Rebus RabbitMQ IHandleMessage 不工作