【问题标题】:Self-contained or versionable messages?自包含或可版本控制的消息?
【发布时间】:2013-05-07 11:12:37
【问题描述】:

我有一些消息设计头痛。我想为一个长时间运行的进程启动一个 NServiceBus 传奇。进行初始化所需的部分数据是约束列表,它们是抽象基类的实现。据我了解设计理念,理想情况下,消息应该是

  1. 自包含,即包含处理它们所需的所有数据。在此之后,我将传递消息中的所有约束列表。
  2. 版本化。 NServiceBus 通过使用不传递类型信息的 XML 序列化程序来做到这一点(请参阅this thread answer by Udi)。就我而言,这意味着我无法在接收端了解约束的细节。

使用BinarySerializer 可以“解决”序列化问题,但这似乎不是推荐的做法,因为它会破坏版本控制。另一种方法是发送一些标识符,以便可以从某个数据存储中检索约束,但这会消除“自包含”。

这里有第三种方法,还是我只需要选择一些“最不坏”的解决方案?

【问题讨论】:

  • 约束列表是如何导出的?大概有一些数据表明需要哪些约束。也许您应该在消息中传递该数据,并在消费者端构建约束列表?
  • @MattDavey:它们不是这样派生的数据,它们是由用户预先配置的。用户可以选择一些符合其业务需求的约束条件(例如“将此流程应用于订单历史 > x $ 的用户”或“将此流程应用于周六 0800 到 1000 之间登录的用户”)。从参数创建列表并不简单(或可能,也许)。

标签: nservicebus messaging


【解决方案1】:

还可以选择通过 DI 将这些对象注入到您的 saga 中。

只需创建一个在启动时会调用的 boostrapping 类:

Configure.Instance.Configurer.ConfigureProperty<yourSaga>(s => s.SomeProperty = value);

【讨论】:

  • 即使需要数据库调用来填充属性,这项工作是否可行/是否推荐使用?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-11
  • 2011-04-15
  • 1970-01-01
  • 1970-01-01
  • 2019-08-22
  • 2018-08-08
相关资源
最近更新 更多