nservicebus - 用于处理来自公共共享服务的事件的 NServiceBus 模式
问题描述
我们有一种情况,我们的一些服务在我们的系统中共享。例如,跟踪股票走势的一种。每当文章的库存水平发生变化时,就会引发一个事件。
我们遇到的问题是,虽然有时另一个服务可能对所有库存变化事件感兴趣(例如进行一些聚合),但在大多数情况下,只有特定操作导致的库存变化才是有趣的。
我们现在面临的问题是这样的。假设有一个 IArticleStockChangedEvent 事件,其中包含文章编号、库存更改和请求更改的 ProcessId。每次更改文章库存都会引发此事件。
现在一些外部服务有一个 saga 来改变 10 篇文章,并命令 stock 服务来做到这一点。它还实现了 IHandleMessages 来跟踪进度。这在理论上很有效,但实际上这意味着包含此 saga 的服务将被不相关的 IArticleStockChangedEvent 消息淹没,它将无法找到相应的 saga 实例。虽然在技术上没有破坏任何东西,但它会导致系统不必要的延迟。
我并不真的期待为每个可能导致股票变化的传奇创建一种新的 IArticleStockChangedEvent。处理此问题的推荐方法是什么?
谢谢
解决方案
关于IArticleStockChangedEvent
您需要将哪些事件传递给您的服务的知识存在于您的“外部”服务中并动态变化,因此不可能(或者复杂且不可扩展)在 Stock 服务或传输级别进行过滤器(例如,服务总线订阅过滤器)。
要进行优化,即避免反序列化IArticleStockChangedEvent
,您可以考虑自定义从消息头Behavior<IIncomingPhysicalMessageContext>
读取Stock
项目的位置Id
并查找数据库以查看该库存项目是否有任何传奇,如果没有,则缩短消息处理。
更好的解决方案可能是使用回复并回复来自Stock
服务的消息。
推荐阅读
- npm - 我在 vscode 中安装带有 vanilla 框架的 npm vite 时遇到问题:npm init @vitejs/app = error (esbuild?)
- abp - 将 ABP 框架迁移到 ABP 商业
- javascript - 历史向后无法与 React Router 和服务器端页面正常工作
- api - 无法获取 ID 来执行删除方法(VueX,VueJS)
- html - 如何删除动态表新行中输入数字的逗号
- angular - “静态链接”一个打字稿库与 Angular
- javascript - jQuery 中的 CSS 属性
- ios - 将图像 URL 上传到 Firestore
- odoo - 您是否找到了一种将 odoo 核心模块以不同形式保存在 v14 中的方法?那么,可以在 gcloud run 中部署 odoo 吗?
- angular - 如何在 Angular 中使用 Jasmine Karma 对 MatSnackbar 进行单元测试