如何避免编译时间依赖于rebus消息?

时间:2017-01-20 12:38:38

标签: rebus

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

Rebus是否有任何优先/最佳做法?

1 个答案:

答案 0 :(得分:1)

实际上有几种方法:)

我自己,我更喜欢将消息分发为单独的NuGet包 - 然后调查$("#selector").data("name", null); console.log($("#selector").data("name")); 以查看每个端点有哪些依赖关系。

只要我保持已发布的消息模式不可变(即遵循严格的仅附加方法来进化它),消费事件就没有问题 - 在反序列化为旧版本的消息模式时,数据会被截断。 / p>

但是如果你希望你的端点不那么耦合,你可以做几件事。

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

事实上 - 如果我没记错的话 - 您可以包含NuGet包JObject并通过

使用它
Rebus.NewtonsoftJson

它将Newtonsoft的Configure.With(new CastleWindsorContainerAdapter(container)) .(...) .Serialization(s => s.UseNewtonsoftJson()) .Start(); 带入混合中,然后您可以通过实现JObject在消息处理程序中使用它。

我希望能给你一些灵感:)