Camel Splitter并行处理数组列表-并发访问问题

2024-01-08

使用 Camel 拆分 ArrayList 并最多 10 个线程并行处理每个项目。 以下是配置。 线程池配置文件设置为最大线程数 = 10。

<camel:route id="ReportsRoute">
        <camel:from uri="direct:processReportsChannel" />
        <camel:to uri="bean:reportRepository?method=getPendingTransactions" />
        <camel:split parallelProcessing="true" executorServiceRef="ReportThreadPoolProfile">
            <camel:simple>${body}</camel:simple>
            <camel:doTry>
                <camel:to uri="direct:processReportChannel" />
                <camel:doCatch>
                    <camel:exception>java.lang.Exception</camel:exception>
                    <camel:handled>
                        <camel:constant>true</camel:constant>
                    </camel:handled>                        
                    <camel:to uri="bean:ReportRepository?method=markAsFailed"/>
                    <camel:wireTap uri="direct:loggingAndNotificationChannel" />
                </camel:doCatch>
            </camel:doTry>
        </camel:split>
    </camel:route>  

bean:reportRepository?method=getPendingTransactions获取 ArrayList 并传递给 Splitter。

processReportChannel是处理物品的处理器。

Problem:作业启动时它正在启动 10 个线程,但有些线程正在拾取相同的项目。例如,如果我在 ArrayList 中有 item_no_1 到 10,则 thread_no_1 和 thread_no_2 或有时有更多线程正在拾取 item_no_2。是因为数组列表不是线程安全的并且 Splitter 不管理它吗?

我不是这方面的专家,需要帮助指出问题所在。


我使用以下(更简单的)设置进行了测试:

<camelContext xmlns="http://camel.apache.org/schema/spring">
    <route id="ReportsRoute">
        <from uri="direct:start" />
         <!-- By default a pool size of 10 is used. -->
        <split parallelProcessing="true">
            <simple>${body}</simple>
            <to uri="direct:sub" />
        </split>
    </route>  
    <route>
        <from uri="direct:sub"/>
        <log message="Processing item ${body}" />
    </route>
</camelContext>

Testing:

 List<Object> list = new ArrayList<>();
 for (int i = 0; i < 1000; i++) {
    list.add("And we go and go: " + (i + 1));
 }
 template.sendBody("direct:start", list);

通过此设置,不会对任何条目进行两次处理。因此,您的处理器中一定存在导致问题的原因,即同一个列表项被多个线程选取。

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

Camel Splitter并行处理数组列表-并发访问问题 的相关文章

随机推荐

  • stanford corenlp,分割句子,缩写例外

    斯坦福 Corenlp 中有指定缩写的选项吗 例如句子中 The reason pt stayed at home was to rest pt 是病人的缩写 corenlp 错误地将其分成两个句子 我想知道如何将缩写列表传递给斯坦福大学的
  • 将 MAC 地址字节数组格式化为字符串

    我正在使用此代码来查找机器的 MAC 地址 此代码直接打印 MAC 地址 但我想将其作为字符串返回 我完全困惑了 请帮忙 try InetAddress add InetAddress getByName 10 123 96 102 Net
  • Asp.net core blazor 与 .net core mvc with razor

    使用 razor 与 blazor 之间的架构差异是什么 文档建议我在使用 blazor 时必须编写一个 Web Api 是否仍然可以像传统 razor 一样传递模型对象 0 带有视觉解释的视频 我决定制作一个视频 因为有人问了有关 Bla
  • 具有输出绑定到队列的 Http 触发功能

    我在 Net5 中有一个http 触发函数 隔离函数 我很难让输出绑定适用于此 https 函数 https 函数检索对象列表 这些对象需要作为单独的消息添加到队列中 FunctionName TestQueueOutput return
  • 在 EF4 中按 ID 选择通用存储库

    因此 我尝试为基本存储库类创建一个通用的按 ID 选择方法 为了实现这一目标 我将 EF4 与 POCO 结合使用 我创建了一个带有名为 Id 的 getter 的接口 并成功修改了 T4 模板 以便在返回 PK 的所有实体中拥有通用 Id
  • 尝试在 Github .md 文件上渲染图表时出现 Mermaid 语法错误

    我已经关注了这个美人鱼教程 https mermaid js github io mermaid sequenceDiagram但是当我尝试将其放入 Github 上的 md 文件时 会出现错误 这完美地适用于现场编辑 https merm
  • 我什么时候应该关闭在无状态会话 bean 中创建的 JMS 连接?

    我有一个关于何时关闭在无状态会话 Bean EJB 中创建的连接的一般性问题 连接到 ActiveMQ 并且它们是在 bean 的构造函数中创建的 然后在方法中使用该连接 我想知道关闭该连接的适当时间 地点是什么时候 有一个单独的方法来关闭
  • istream 提取运算符:如何检测解析失败?

    如何检测 istream 提取是否失败 string s x stringstream ss s int i ss gt gt std ios hex gt gt i 编辑 虽然问题标题涵盖了这一点 但我忘了在正文中提及 我真的想检测失败是
  • 在 TFS 中,如何更正现有变更集上工作项的链接

    将更改集签入 VS2010 TFS 中的源代码管理后 如何更正与签入相关的工作项 例如 如果我意识到还有另一个工作项应该链接到变更集 或者它是一个错误修复并且链接到错误的错误工作项 您无法从变更集 UI 中更改它 但可以从大多数工作项 UI
  • Google Cloud SQL 上的 1290 错误

    我今天在使用 MySQL Workbench 时才开始收到此错误 并注意到它早在周六就出现在我的应用程序中 还有人收到吗 知道可能是什么原因造成的吗 ERROR错误代码 1290 MySQL 服务器正在使用 read only 选项运行 因
  • Microsoft Visual Studio 2017 依赖于每个 Xamarin 操作

    我最近安装了 Visual Studio 2017 当我创建 Xamarin android 项目或单击 xamarin 设置时 它会挂起 当单击任意位置时 它会显示 Microsoft Visual Studio 正忙 Xamarin 版
  • 如何将 setOnFocusChangeListener 与 RecyclerView 结合使用?

    我在 RecyclerView 的适配器类中的 onBindViewHolder 上有以下内容 holder answerEditText setOnFocusChangeListener new View OnFocusChangeLis
  • 在 VS2010 中将设计器与 WPF 的 XAML 窗口分离

    我在 Visual Studio 2010 中没有看到用于将设计器窗口与 WPF 的 XAML 窗口分开的按钮 我有三个屏幕 我想要一个全屏 XAML 窗口和一个全屏设计器窗口 像往常一样打开 XAML 文件 在解决方案资源管理器中 右键单
  • 我如何打开不同的linux终端以在python中输出不同类型的调试信息?

    我需要将不同的信息输出到不同的终端实例 而不是在同一输出流中打印它们 例如 std err 或 std out 例如 我有 5 种信息说 A E 需要显示在同一桌面上的不同终端窗口上 看起来像 终端1 终端2 端子3 端子4 端子5 我知道
  • 用前导 0 填充计数器到 9,然后用 php 删除前导零

    尝试用前导 0 填充最多 9 个 然后删除 01 02 03 04 05 06 07 08 09 10 11 12 14 到目前为止我有这个 您还可以使用str pad http us php net manual en function
  • Firefox 和 Opera 中的 Webfont 平滑和抗锯齿

    我的网站上使用了定制的网络字体 为了设置渲染输出的样式 我使用了以下代码 webkit text stroke width 05px webkit text stroke color white webkit font smoothing
  • 如何只加载某些层的权重?

    我想获取某些层的权重 不是全部 因为架构不同 来自model trained并初始化model untrained用它 我怎样才能用 Keras 做到这一点 如果你有一个函数create model 它返回一个 Keras 模型 examp
  • 如何将QMainWindow设置为模态窗口?

    我正在使用 QMainWindow 进行项目的 GUI 开发 我遇到的一个问题是当一个窗口正在运行时阻止所有其他可见窗口获取输入 我不能使用QDialog 因为需要QMainWindow的丰富功能 如何将特定窗口声明为模态窗口 我尝试过QW
  • BeanPostProcessor 混乱

    我试图理解 Spring 中的 BeanPostProcessor 但不明白它的作用 BeanPostProcessor 定义了在这些点调用的两个方法是否正确 在初始化之前 init 方法或 afterPropertiesSet 但实例已创
  • Camel Splitter并行处理数组列表-并发访问问题

    使用 Camel 拆分 ArrayList 并最多 10 个线程并行处理每个项目 以下是配置 线程池配置文件设置为最大线程数 10