【发布时间】:2021-04-10 02:36:18
【问题描述】:
我正在使用带有 Kingsway 的 RabbitMQ 组件的 SSIS 包,并且在从队列加载消息时遇到了一些奇怪的行为。我平均每天处理 2,500 条消息,在极少数情况下,单个消息似乎“丢失”(我的客户告诉我,他们已将特定消息插入队列,但它没有显示在我的端)。
我对从队列中收到的所有内容以及最终插入数据库的所有内容进行行计数 - 这些计数匹配,因此我相当确定在处理过程中我不会丢失任何内容。
我还将处理过程中的任何错误重新路由到错误表,这样就不会因为错误的内容而丢失任何消息。 唯一不提供重新路由错误可能性的组件是 RabbitMQ Source(RabbitMQ Destination 提供),因此在极少数情况下我无法检查消息是否因某种原因被丢弃。
对于大约 0.005% 的所有消息,这种行为似乎是随机发生的。
有没有人遇到过类似的问题,或者可以向我指出任何方向以查找可能的错误?
组件的相关设置为:
RMQ 连接管理器:
RMQ 来源:
编辑:
加载成功后,会收到所有消息。当消息丢失时,不会为该批次传输任何消息。例如:没有传输 3 条消息中有 2 条的情况。发生错误时,已传输 3 条消息中的 0 条。队列中的消息仍然得到确认,不会在下一批中传输。
更新: Kingsway 提供了一个更新的版本,我会尝试一下。
【问题讨论】:
-
会不会是消息没有被下游管道组件处理?如果您使用我们的任何目标组件,我们通常支持将错误行重定向到错误输出以进行日志记录或任何目的的选项。这样您就可以跟踪在处理目标组件中的行时是否发生错误。
-
我对包中的每个下游组件都使用错误重定向 - 没有消息被重定向到相应的错误表。我还在包中使用了一些 SQL 任务,但这些任务上的任何错误都会导致包失败。行/消息计数的差异不会发生在包本身内(我从队列中获得并最终插入我的表中的所有内容的计数 machtes -> 我处理并插入我收到的所有内容)。差异在于消息生产者插入队列的内容与我从队列中收到的内容之间。
-
在消息发送到队列和我们的软件可以接收消息之间可能会有一小段延迟。你有考虑到这一点吗?
-
是的,我有。如果有延迟,则应在下次运行包时传输消息。我现在已经能够在昨晚验证一个实例,当时一个单独的 c# 使用者在队列中检测到 2 条消息,但 RMQ 源组件接收到 0 条消息。编辑:我已经缩小了问题范围:从队列中加载消息的作业每 5 分钟运行一次。似乎在加载消息时,所有消息都已加载。在缺少消息的情况下,将加载 0 条消息,但正在确认队列中的任何现有消息。
-
嗨 Stephan,我们发现这可能与 RabbitMQ 接收方法的设计方式有关。我们正在寻求提供不同的选择,您可以尝试一下。根据 RabbitMQ 文档,我们的新选项应该没有任何差异。同样,这是一种 API 行为,它不是我们的编码或任何类似性质的问题。请通过电子邮件与我们联系,以获取我们希望在未来几天内提供的即将推出的临时版本。
标签: ssis rabbitmq kingswaysoft