【问题标题】:Parallel For-Each vs Scatter Gather in muleParallel For-Each vs Scatter Gather in mule
【发布时间】:2020-05-03 05:30:09
【问题描述】:

我有多个记录:

{
 "item_id":1",
 key1: "data1"
}
{
  item_id:2
 key1: "data1"
}
{
  item_id:2
 key1: "data1"
}
{
  item_id:1
 key1: "data1"
}

我不想按顺序处理它们。可能有超过 200 条记录。我应该使用 for-each parallel 还是 scatter-gather 来处理它们。根据我的要求,哪种方法最好。 我不需要累积响应,但是如果在处理(根据if条件为每条记录打一个api)任何一条记录时出现异常,其他记录的处理必须不受影响。

【问题讨论】:

  • 我会选择使用 George 提供的内容将其推送到 VM 队列。但是,如果您使用多线程的目的不是提高性能,而是避免在其中一条记录失败时引发错误,我建议您在具有 try/catch 范围的普通 for-each 上执行此操作。这比过度设计您的需求要简单得多,也更容易排除故障。
  • @oim 我想提高性能,但我之前没有使用过 VM 连接器。你能分享任何例子吗?

标签: multithreading esb anypoint-studio dataweave mule4


【解决方案1】:

为什么不使用 VM 模块,将集合分解为单独的记录并将它们推送到 VM 队列?然后有另一个流程,VM 侦听器拾取各个记录(并行)并处理它们。 更多详情:https://docs.mulesoft.com/mule-runtime/4.2/reliability-patterns

【讨论】:

  • 您好,感谢您回答我的问题。我只需要检查记录的字段并为每条记录点击一个 api,我必须对所有记录执行此操作。您仍然认为使用 VM 连接器会是更好的选择吗?如果可能,您能否分享一个示例流程来说明 VM 连接器的工作原理
  • 是的,我做虚拟机会更好,尤其是因为你不关心响应。今晚晚些时候我会分享一些东西。
  • 谢谢,等待您的回复。
  • 这是我的 google 驱动器的链接,它说明了您可以使用 VM 模块并行处理记录的问题的解决方案:drive.google.com/open?id=1uUqNqjwXkJYEh1SO6poD7KODGDcKTORZ
  • 您好,可以给我访问权限吗?
【解决方案2】:

Scatter-gather 适用于您拥有静态数量的路由的情况。想象一下一条发送到 HR 系统和另一条发送到会计系统的路线。

要处理可变数量的记录,您应该使用并行 for-each。

【讨论】:

    【解决方案3】:

    使用 foreach 异步或并行或 jms 模式。 Scater-gather 为所有线程接收一个有效负载,您将无法循环

    【讨论】:

      猜你喜欢
      • 2011-10-31
      • 2020-06-26
      • 1970-01-01
      • 1970-01-01
      • 2020-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-20
      相关资源
      最近更新 更多