在抛出任意数量的默认异常后,Mule流是否会停止处理消息?

在抛出任意数量的默认异常后,Mule流是否会停止处理消息?,mule,Mule,我有一个使用Mongo连接器在Mongo数据库中插入对象的流,它使用连接器提供的MongoClientImpl。此客户机有一行代码,在将插入提交到数据库后将值作为字符串返回给用户之前,尝试将\u id强制转换为ObjectId。据我所知,这一行并不影响是否插入对象,但在尝试将字符串转换为ObjectId时,它确实会引发异常 我的流抛出了数百个ClassCastExceptions。它似乎也没有像我预期的那样处理那么多的插入。我希望看到数以万计的文档,但是流只插入136个文档 在流停止处理给定消息

我有一个使用Mongo连接器在Mongo数据库中插入对象的流,它使用连接器提供的
MongoClientImpl
。此客户机有一行代码,在将插入提交到数据库后将值作为字符串返回给用户之前,尝试将
\u id
强制转换为ObjectId。据我所知,这一行并不影响是否插入对象,但在尝试将字符串转换为ObjectId时,它确实会引发异常

我的流抛出了数百个
ClassCastException
s。它似乎也没有像我预期的那样处理那么多的插入。我希望看到数以万计的文档,但是流只插入136个文档


在流停止处理给定消息之前,Mule的DefaultMessaginExceptionStrategy可以抛出和捕获的异常数量是否有限制?

答案是否定的,但您可以实现一些自定义逻辑并停止流。可能您以后需要手动启动它,我会这样做:

  • 使用对象存储模块计算给定异常的发生率
  • 当定义了一定数量的事件以编程方式停止流时,如果groovy可以直接访问注册表,那么执行此操作的一个选项类似于
    #[groovy:.stop()]
  • 发送电子邮件通知,以便了解错误(特别适用于生产)

您所说的“停止处理”是什么意思?在一定数量的异常之后,流消息源(即轮询器/端点)是否停止提供新事件?另外,您在这里描述的内容感觉像Mongo连接器中的一个bug(它不应该抛出
ClassCastException
s):您可能应该向MuleSoft报告这个问题。我想我在什么地方读到过,如果在给定流中抛出一定数量的异常,流将停止对流的给定实例的处理。我不完全清楚为什么只有136个文档被成功插入,而它们似乎与未插入的20多个文档没有任何不同。我想在试图弄清楚可能发生的其他情况之前,我会尝试排除在给定的流运行中抛出的异常是否存在任意限制。我在GitHub上创建了一个问题:这是报告该问题的适当空间吗?我希望更清楚地说,一条消息进入我的流程,将被分解为20000多个对mongo连接器的调用,以插入已经包含“\u id”的文档。我想知道在处理这条消息时,如果一个流达到了一个任意的异常阈值,它是否会停止。如果你能显示你的流,这将非常有帮助。事实上,如果您创建20K条消息并在同一个流中迭代它们,那么所有这些消息都在内存中,当然,事情可能会严重中断。我会使用多个流,中间有一个异步队列来解耦阶段(是的,这是Mongo连接器问题的正确位置,如果您可以格式化异常,那将非常好)。Hi Juan,我面临Gary提到的相同问题。我的审计流从JMS入站端点接收消息,并尝试将审计记录插入数据库。在数据库关闭的某些情况下,捕获异常策略会消耗消息,写入故障队列并抛出错误日志。我见过这个问题,其中80个错误是由于数据库连接失败引起的。然后审核流停止从JMS入站端点接收事件。我可以看到队列中有1465条消息,它被加载了,但流无法选择这些消息进行处理