带有消息队列的任务处理状态

2023-12-29

我正在开发一个产品数据导入系统,该系统从外部源下载产品数据,将其转换为正确的模式,并存储结果 - 本质上是一个 ETL 系统。系统处理的核心消息类型是“ImportProductCommand”,它指定要导入的产品和来源。然而,导入命令很少单独发送。典型的业务需求是从给定来源导入整套产品。目前,这表示为“ImportProductsCommand”消息,可以指定要导入的多个产品。命令处理程序使用此消息,将其转换为单独的“ImportProductCommand”消息并将它们发送到队列进行处理。各个导入请求的使用者发布“ProductImportedEvent”或“ProductImportFailedEvent”。当接收到“ImportProductsCommand”消息时,服务会为该消息分配一个 GUID 令牌,将该消息放入队列中,然后返回该令牌。然后,该令牌用作关联 ID,以便各个导入请求可以与批量导入请求相关联。有了这个基础设施,就可以确定与给定令牌关联的事件数量,从而确定导入产品或失败导入的数量。缺少的是一个显式事件来指示批量导入已完成。单个导入请求的处理程序不会明确意识到它是批量导入请求的一部分。这当然可以通过了解要导入的产品数量以及计算与特定相关 ID 关联的导入事件的数量来推断。当前的实现利用消息队列系统来处理进程重新启动和失败,但对于批量导入请求不太明确。总的来说,系统需要回答的查询是:

  • 给定的批量导入是否完成?
  • 对于给定的批量导入,还剩下多少个单独的导入?
  • 完成了多少个单独的导入?
  • 有多少是错误的?

有哪些最佳实践或建议方法来支持这些查询并仍然利用消息队列系统来实现弹性?目前,将它们联系在一起的是上面提到的令牌,但是没有明确的记录来表示批量导入请求实体,如果有的话,那么单个导入请求处理器将需要知道这样的实体才能更新相应的状态。

所有这些都是使用 C#、NServiceBus 实现的,并作为 IIS WCF 应用程序托管。


这可以实现为NServiceBus 传奇 http://nservicebus.com/Sagas.aspx. 导入产品命令应该由一个处理佐贺(进口产品佐贺),并且 Saga 数据可以在发送导入产品命令. 进口产品传奇应该处理产品进口事件 and 产品导入失败事件。在处理的每个事件上进口产品传奇, 增量产品进口 or 导入失败的产品。还要检查 (ProductsImported + ProdctsFailedToImport) 的总和是否等于 ProdctsToBeImported,如果是,则完成传奇。

ImportProductsSaga 数据需要跟踪发送的 ImportProductCommand 数量和收到的回复,您可以计算待处理的回复等。 Saga 数据如下所示,例如:

   public class ImportProductsSataData{ 
       public Guid Id {get; set}
       public int ProdctsToBeImported {get; set}
       public int ProdctsImported {get; set}
       public int ProdctsFailedToImport {get; set}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带有消息队列的任务处理状态 的相关文章

  • Boost ASIO 串行写入十六进制值

    我正在使用 ubuntu 通过串行端口与设备进行通信 所有消息都必须是十六进制值 我已经在 Windows 环境中使用白蚁测试了通信设置 并得到了我期望的响应 但在使用 Boost asio 时我无法得到任何响应 以下是我设置串口的方法 b
  • 如何在 C# 中将 Json 转换为对象

    我想将 Json 转换为 C 中的对象 这里的 Json 是 值 e920ce0f e3f5 4c6f 8e3d d2fbc51990e4 如何使用 Object 问题看似愚蠢 但其实并不那么愚蠢 我没有简单的 Json 我有 IEnume
  • 防止控制台应用程序中的内存工作集最小化?

    我想防止控制台应用程序中的内存工作集最小化 在Windows应用程序中 我可以这样做覆盖 SC MINIMIZE 消息 http support microsoft com kb 293215 en us fr 1 但是 如何在控制台应用程
  • MVC 5 中具有 ASP.NET Identity 的 Autofac 不会验证 OWIN 管道中的安全标记

    我在 MVC 5 中设置了 AutoFac 来与 ASP NET Identity 一起使用 表面上一切似乎都工作正常 即用户可以创建帐户并登录 但后来我发现 当安全标记更改时 用户不会注销 通过在 AspNetUsers 表中进行暴力破解
  • 包恢复失败。回滚包更改 - Serilog.AspNetCore

    我有一个 asp net Core 项目 我正在尝试向其中添加一个记录器 我选择了我在其他项目中使用过的 SeriLog 但是当我尝试添加 Serilog AspNetCore 我得到的软件包版本 2 0 0 包恢复失败 回滚 后端 的包更
  • Unity手游触摸动作不扎实

    我的代码中有一种 错误 我只是找不到它发生的原因以及如何修复它 我是统一的初学者 甚至是统一的手机游戏的初学者 我使用触摸让玩家从一侧移动到另一侧 但问题是我希望玩家在手指从一侧滑动到另一侧时能够平滑移动 但我的代码还会将玩家移动到您点击的
  • Linux 上的 RTLD_LOCAL 和dynamic_cast

    我们有一个由应用程序中的一些共享库构成的插件 我们需要在应用程序运行时更新它 出于性能原因 我们在卸载旧插件之前加载并开始使用新插件 并且只有当所有线程都使用旧插件完成后 我们才卸载它 由于新插件和旧插件的库具有相同的符号 我们dlopen
  • LinkLabel 无下划线 - Compact Framework

    我正在使用 Microsoft Compact Framework 开发 Windows CE 应用程序 我必须使用 LinkLabel 它必须是白色且没有下划线 因此 在设计器中 我将字体颜色修改为白色 并在字体对话框中取消选中 下划线
  • 条件类型定义

    如果我有一小段这样的代码 template
  • 如何在 Javascript 中连接 C# ActiveX 事件处理程序

    我尝试使用几个代码片段将 ActiveX 对象与 Javascript 事件处理程序挂钩 我无法确定为什么事件处理程序没有被调用 带有项目的 Github 存储库 https github com JesseKPhillips Csharp
  • 如何对使用 Controller.User 变量的控制器操作进行单元测试?

    我有一个控制器操作 如果用户已经登录 它会自动重定向到新页面 User Identity IsAuthenticated 针对这种情况编写单元测试以确保重定向发生的最佳方法是什么 我一直在使用以下 Mocks 和 Moq 来允许在我的单元测
  • Unity c# 四元数:将 y 轴与 z 轴交换

    我需要旋转一个对象以相对于现实世界进行精确旋转 因此调用Input gyro attitude返回表示设备位置的四元数 另一方面 这迫使我根据这个四元数作为默认旋转来计算每个旋转 将某些对象设置为朝上的简单方法如下 Vector3 up I
  • 当Model和ViewModel一模一样的时候怎么办?

    我想知道什么是最佳实践 我被告知要始终创建 ViewModel 并且永远不要使用核心模型类将数据传递到视图 这就说得通了 让我把事情分开 但什么是Model 和ViewModel一模一样 我应该重新创建另一个类还是只是使用它 我觉得我应该重
  • .NET 和 Mono 之间的开发差异

    我正在研究 Mono 和 NET C 将来当项目开发时我们需要在 Linux 服务器上运行代码 此时我一直在研究 ASP NET MVC 和 Mono 我运行 Ubuntu 发行版 想要开发 Web 应用程序 其他一些开发人员使用 Wind
  • C++ 指针引用混淆

    struct leaf int data leaf l leaf r struct leaf p void tree findparent int n int found leaf parent 这是 BST 的一段代码 我想问一下 为什么
  • 如何在C#中控制datagridview光标移动

    我希望 datagridview 光标向右移动到下一列 而不是在向单元格输入数据后移动到下一行 我试图通过 dataGridView1 KeyDown 事件捕获键来控制光标 但这并不能阻止光标在将数据输入到单元格后移动到下一行 提前感谢你的
  • 如何编写一个接受 int 或 float 的 C 函数?

    我想用 C 语言创建一个扩展 Python 的函数 该函数可以接受 float 或 int 类型的输入 所以基本上 我想要f 5 and f 5 5 成为可接受的输入 我认为我不能使用if PyArg ParseTuple args i v
  • 任何人都可以清楚地告诉如何在不使用像 这样的预定义函数的情况下找到带有小数值或小数值的指数吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 例如 2 0 5 1 414 所以想要 我是 c 的新手 所以请解释简单的逻辑 如果不是复杂的逻辑也足够了 在数学中 从整数取幂到实数
  • 如果将变量设置为等于新对象,旧对象会发生什么?

    假设我们有一个 X 类not有一个超载的operator 功能 class X int n X n 0 X int n n n int main X a 1 an object gets constructed here more code
  • .Net Reactive Extensions Framework (Rx) 是否考虑拓扑顺序?

    Net 反应式扩展框架是否按拓扑顺序传播通知以最大限度地减少更新量 就像 Scala Rx 所做的那样 Net 反应式扩展 Rx 是否可以 https github com lihaoyi scala rx wiki How it Work

随机推荐

  • UEFI引导加载程序

    我正在考虑开发一个简单的 首先 UEFI 引导加载程序来加载 ELF 映像 并且想知道是否有人有一个很好的切入点 可以进入任何现有项目 或者我可以用来开始使用的示例 另外 我想知道是否有人有让虚拟机运行 EFI 应用程序的经验 我已经设置了
  • 子进程会发生什么?

    如果子进程的父进程未经等待就突然终止 会发生什么情况 子进程也会死吗 孩子得到重新定义为init http en wikipedia org wiki Orphan process
  • linux Wayland 显示多用户

    我使用摇摆合成器 当我在控制台中更改用户时 我无法显示 wayland 图形界面 它与 X 应用程序一起使用 su otherUser myApplicationWayland error XDG RUNTIME DIR not set i
  • Windows 上的 Apache / PHP 因正则表达式而崩溃

    我发现以下 PHP 代码在 Windows Apache 服务器上运行时会崩溃
  • Google Firebase 功能部署失败 - 我该怎么办?

    错误信息 Error There was an error deploying functions firebase debug log 包含以下内容 debug 2021 11 16T12 12 16 165Z Error Failed
  • 如何在 NestJS 中提供静态图像

    我开始学习 MEAN 堆栈 当我访问 Express 时 我发现 Express 框架中存在一个额外的层 称为 NestJS 它拥有我想要的一切 并且具有类似 Angular 的语法 因此对我来说非常完美 但每一个新步骤都是一场噩梦 文档根
  • Android SurfaceView 的低 FPS

    我在使用 SurfaceView 时遇到了一些帧速率问题 我正在做我在一些教程中找到的典型内容 所有教程都说一样 但我无法在我的三星 Galaxy S 旧款 i9000 上达到像样的帧速率 这是我的循环线程的代码 FPS 初始化为 30 O
  • RESTSharp 无法找到位置标头

    我有一个 C 异步任务返回 Task
  • 无法将外部引用与 C# 控制台应用程序一起使用

    我已经尝试了下面的所有建议 但仍然没有喜悦 我现在正在尝试控制台应用程序 让我准确解释一下我在做什么 我在 VS 2010 中创建一个新的控制台项目 我添加了许多引用 dll 其中一些不是我的 例如 Castle Winsor 和 N2 C
  • Rails 开发人员如何与 Flex 前端对话?

    我将 Rails 开发视为 Flex 应用程序的后端 并试图找出 Rails 应用程序和 Flash Player 之间的通信层 我发现的所有内容都表明使用 SOAP Web 服务进行通信 然而 Flash 支持 AMF 它很好且快速 并且
  • 在 AFNETWORKING 中返回响应

    我正在关注this http www raywenderlich com 30445 afnetworking crash course在 IOS 中学习 AfNetworking 的教程 我正在使用以下函数来获取服务器的响应 1 NSSt
  • 仅更改图表一个区域的背景颜色[重复]

    这个问题在这里已经有答案了 我想仅更改图表的一部分的背景颜色 那可能吗 例如 使用下面的图表 我可能想表明我对重量在 2 到 4 吨之间的汽车特别感兴趣 因此希望使用粉红色背景突出显示该区域 更具体地说 我想覆盖一个透明的粉红色矩形 该矩形
  • 如何在 Swift 中检索对象的类型? [复制]

    这个问题在这里已经有答案了 我似乎无法在 Swift 中找到返回对象类型的函数或方法 如何在 Swift 中检索对象的类型或类 我尝试使用 Obj C 类 但显然不起作用 在Python中你有类似的东西type or isinstance
  • 如何为每个版本提供 2 种风格和 2 种不同的密钥配置以用于调试版本?

    背景 我认为 Google 登录存在一个问题 该问题与我们对我们开发的 2 种不同风格的应用程序使用相同的密钥配置这一事实有关 原因是两者在调试和发布时似乎具有相同的 SHA1 该问题仅存在于第二个版本的发行版本中 在第一种风格的构建和调试
  • TestNG中BeforeClass和BeforeTest的区别

    从 TestNG 官方文档中我们得知 BeforeClass 带注释的方法将在调用当前类中的第一个测试方法之前运行 BeforeTest 带注释的方法将在属于该类内部的任何测试方法之前运行
  • C# 调用 C++ DLL 传递指针到指针参数

    你们能帮我解决以下问题吗 我有一个 C 函数 dll 它将由另一个 C 应用程序调用 我需要的功能之一如下 struct DataStruct unsigned char data int len DLLAPI int API ReadFi
  • pandas.DataFrame 子类的属性在 pickle 后消失

    我试图将属性添加到 pandas DataFrame 的子类中 它们在酸洗和取消酸洗后消失 import cPickle import pandas as pd class MyClass pd DataFrame def init sel
  • 使用 C# 反序列化具有一个空白键的深度嵌套 Json

    我正在尝试将下面的嵌套 Json 反序列化为自定义 c 类型 该类型也在下面进行了描述 但我不断将反序列化对象中的路径键设置为 null 下面是代码 任何有关如何正确反序列化的建议都非常感谢 Json swagger 2 0 info ve
  • Android:strings.xml的默认语言

    我将翻译我的应用程序 strings xml 文件 strings xml 文件的默认语言是什么 因为现在我需要支持意大利语 我现在编写 strings xml 的语言 和英语 我应该使用 string xml 来表示英语并创建 资源 值
  • 带有消息队列的任务处理状态

    我正在开发一个产品数据导入系统 该系统从外部源下载产品数据 将其转换为正确的模式 并存储结果 本质上是一个 ETL 系统 系统处理的核心消息类型是 ImportProductCommand 它指定要导入的产品和来源 然而 导入命令很少单独发