NServiceBus模式用于处理来自共享服务的事件

问题描述

我们的情况是我们的一些服务在整个系统中共享。例如,一个跟踪股票走势的股票。每当文章的库存水平更改时,都会引发一个事件。

我们遇到的问题是,尽管有时其他服务可能对所有库存变化事件都感兴趣(例如进行一些汇总),但在大多数情况下,只有特定操作导致的库存变化才有意义。 / p>

我们现在面临的问题是这个。假设有一个IArticleStockChangedEvent事件,该事件包含商品编号,库存更改和请求更改的ProcessId。物品库存的每一次更改都会引发此事件。

现在,某些外部服务可以更改10篇文章,并命令库存服务执行此操作。它还实现了IHandleMessages来跟踪进度。从理论上讲,这很好用,但是在实践中,这意味着包含该传奇的服务将被不相关的IArticleStockChangedEvent消息淹没,因此它将无法找到相应的传奇实例。虽然从技术上讲没有破坏任何内容,但会导致系统不必要的延迟。

我不太希望为每个可能导致库存变化的传奇创建一种新的IArticleStockChangedEvent。建议使用什么方法解决此问题?

谢谢

解决方法

您需要将哪些IArticleStockChangedEvent事件传递给服务的知识位于您的“外部”服务中,并且会动态更改,因此无法(或复杂且不可扩展)在其中进行过滤库存服务或运输级别的服务(例如,“服务总线”订阅过滤器)。

要进行优化(即避免对IArticleStockChangedEvent进行反序列化),您可以考虑使用自定义Behavior<IIncomingPhysicalMessageContext>,在其中您从消息头和查找数据库中读取Stock项目的Id看看该库存商品是否存在传奇,如果没有,请缩短消息处理的时间。

更好的解决方案可能是使用Reply并回复来自Stock服务的消息。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...