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