问题描述
我们的情况是我们的一些服务在整个系统中共享。例如,一个跟踪股票走势的股票。每当文章的库存水平更改时,都会引发一个事件。
我们遇到的问题是,尽管有时其他服务可能对所有库存变化事件都感兴趣(例如进行一些汇总),但在大多数情况下,只有特定操作导致的库存变化才有意义。 / p>
我们现在面临的问题是这个。假设有一个IArticleStockChangedEvent事件,该事件包含商品编号,库存更改和请求更改的ProcessId。物品库存的每一次更改都会引发此事件。
现在,某些外部服务可以更改10篇文章,并命令库存服务执行此操作。它还实现了IHandleMessages来跟踪进度。从理论上讲,这很好用,但是在实践中,这意味着包含该传奇的服务将被不相关的IArticleStockChangedEvent消息淹没,因此它将无法找到相应的传奇实例。虽然从技术上讲没有破坏任何内容,但会导致系统不必要的延迟。
我不太希望为每个可能导致库存变化的传奇创建一种新的IArticleStockChangedEvent。建议使用什么方法来解决此问题?
谢谢
解决方法
您需要将哪些IArticleStockChangedEvent
事件传递给服务的知识位于您的“外部”服务中,并且会动态更改,因此无法(或复杂且不可扩展)在其中进行过滤库存服务或运输级别的服务(例如,“服务总线”订阅过滤器)。
要进行优化(即避免对IArticleStockChangedEvent
进行反序列化),您可以考虑使用自定义Behavior<IIncomingPhysicalMessageContext>
,在其中您从消息头和查找数据库中读取Stock
项目的Id
看看该库存商品是否存在传奇,如果没有,请缩短消息处理的时间。
更好的解决方案可能是使用Reply并回复来自Stock
服务的消息。