当前位置: 首页 > 知识库问答 >
问题:

Apache Camel拆分器、Threadpool和JMS

金高飞
2023-03-14

我在spring xml中定义了以下路由,以拆分文本文件中的行,并将每一行发送到JMS队列

<bean id="myPool" class="java.util.concurrent.Executors" factory-method="newCachedThreadPool"/>

<camelContext id="concurrent-route-context" xmlns="http://camel.apache.org/schema/spring" trace="true">
    <route id="inbox-threadpool-split-route">
        <from uri="{{inbox.uri}}" />
            <log message="Starting to process file: ${header.CamelFileName}" />
            <split streaming="true" executorServiceRef="myPool">
                <tokenize token="\n" />
                <to uri="{{inventory.queue.uri}}" />    
            </split>
            <log message="Done processing file: ${header.CamelFileName}" />
    </route>
</camelContext>

如果我将“to”uri替换为“direct”endpoint,那么无论拆分器中是否使用threadpool都可以传递拆分消息

为了使JmsComponent与Splitter+ThreadPool一起工作,JmsComponent中是否需要任何特殊设置?或者我错过的任何其他配置?

=========20150731编辑=========

2015-07-31 11:02:07,210 [main           ] INFO  SpringCamelContext             - Apache Camel 2.15.0 (CamelContext: concurrent-route-context) started in 1.301 seconds
2015-07-31 11:02:07,220 [main           ] INFO  MainSupport                    - Apache Camel 2.15.0 starting
2015-07-31 11:02:17,250 [://target/inbox] INFO  inbox-threadpool-split-route   - Done processing file: smallfile.csv

此外,从JMS侦听器日志来看,它能够在同一秒钟内接收所有10条消息。似乎拆分器将读取并拆分整个文件,为所有十行“准备”10条JMS消息,然后将所有消息交付到队列,但不是“拆分1行并立即交付1条JMS消息”...

是否有任何选项或配置可以改变拆分器行为并提高拆分性能?

共有1个答案

云远
2023-03-14

我在使用带标记的拆分器处理14G文件时也遇到了类似的问题。正如Claus关于用Apache Camel解析大文件的文章所指出的那样,我能够通过使用聚合器克服性能问题

在对批处理消息进行聚合之后,我使用producer模板将这些消息路由到消息传递系统。希望能有所帮助。

 类似资料:
  • 我从基于apache-camel-spark的rest接口获得一个json数组作为输入。开始时,我想通过apache camels路线分割json-array来处理每个元素。我该怎么做? 我的测试输入json: 对于这个问题,我在stackoverflow上找到了一些间接描述的问题: link 1, link 2, link 3。 根据这些示例,我尝试了以下骆驼路线: 当我这样做时,我总是得到以下

  • 目前,我正在与spring integration合作开发新的应用程序,并启动了poc,以了解如何处理故障案例。在我的应用程序中,spring integration将接收来自IBM mq的消息,并根据消息类型验证头信息和到不同队列的路由。传入的消息可能是批量消息,所以我使用了spring integration的拆分器和聚合器,并且对技术工作流程有很好的进展和控制。目前我面临的问题很少,我们有I

  • threadpool 是一个简单的 C 语言实现的线程池。给予 pthreads 实现。

  • 与之间的差异: > 它们可能有不同的特点: 这里讨论的似乎是另一个毫无意义的流拆分器特性策略(并行计算似乎更好):深入理解Java8和Java9中的拆分器特性 在本例中,从禁用拆分功能的顺序流创建了一个拆分器(返回null)。当以后需要转换回一个流时,该流不会从并行处理中受益。一种耻辱。 最大的问题是:作为解决办法,在调用之前总是将流转换为并行流会有什么主要影响?

  • 我正在尝试向异步路由发送消息,但它不起作用。我刚刚在github上创建了一个项目来模拟这个问题

  • 这可能是一个基本问题,但是有人能解释一下和之间的主要区别并给出一些例子吗?