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

Camel拆分EIP和池中线程的使用似乎不会超过最小线程

仲孙向明
2023-03-14

我正在使用Apache Camel2.15,发现了一个有趣的行为。我将通过REST API调用接收的数据放置到Camel路由中,这是一个直接的endpoint。这个路由反过来使用拆分的EIP,并调用另一个Camel路由,该路由也是一个直接endpoint。

以下是相关的Camel代码

from("direct:activationInputChannel").routeId("cbr_activation_route")
// removed some processes
.split(simple("${body}"))
   .parallelProcessing()
   .to("direct:activationItemEndPoint")
.end()
// removed some processes

from("direct:activationItemEndPoint").routeId("cbr_activation_item_route")
.process(exchange -> this.doSomething(exchange))
// removed some processes

谢谢

共有1个答案

蓬琦
2023-03-14

同意Frederico关于Java的线程池执行器行为的回答。它更喜欢向队列中添加新请求,而不是在“核心池大小”线程达到后创建更多线程。

如果您希望TPE在达到“核心池大小”之后,在请求进入时添加更多的线程,那么基于Java调用BlockingQueue中的offer()方法来对请求进行排队这一事实,有一种稍微笨拙的方法来实现这一点。如果offer()方法返回false,它将创建一个新线程并调用执行器的RejectedExecutionHandler。可以重写offer()方法并创建自己版本的ThreadPool执行器,该执行器可以根据负载扩展线程数。

我在这里找到了一个例子:https://github.com/kimchy/kimchy.github.com/blob/master/_posts/2008-11-23-juc-executorservice-gotcha.textile

 类似资料:
  • 主要内容:一、MySql中的线程,二、主要方式,三、源码流程,四、总结一、MySql中的线程 在mysql中,每一个连接上来,就会分配给一个相关的THD数据类。在前面的分析中可以看到,连接器(Connectors)连接到的直接就是连接池,在连接池的线程处理中分为三部分,即一对一(一个连接对应一个线程),多对一(多个连接对应一个线程)和线程池(多对多)。 线程池和线程可以针对不同的具体场景来处理具体的事务,这样既兼顾了效率又提高了适应性,对于新手来说,这就是设计的一个

  • 问题内容: 我正在尝试在我正在处理的Python项目中使用线程,但是线程似乎没有按照我的代码的预期运行。似乎所有线程都按顺序运行(即,线程2在线程1结束后开始,它们不是同时启动)。我编写了一个简单的脚本来对此进行测试,并且该脚本也按顺序运行线程。 这是我从运行它得到的输出: 循环的迭代次数更多时,观察到相同的行为。 我尝试搜索网络和较早的SO答案,但找不到任何有帮助的方法。有人可以指出这段代码有什

  • 我创建了多个camelContext,并希望每个camelContext使用自己的自定义线程池。但是,日志显示我所有的camelContext都使用同一个线程池。我错过了什么? 主要背景 “loadJsontoCreateRoute”方法将读取三个json文件,然后创建三条连接路径 终点“file://xxx1/out“到endpoint”直接vm:out。测试“ 终点“file://xxx2/o

  • 问题内容: 我正在比较测试程序上的两个变体。两者都在具有四个内核的计算机上以4线程运行。 在“模式1”下,我非常类似于执行程序服务来使用池。我把一堆任务扔了进去。与普通的固定线程执行器服务相比,我获得了更好的性能(即使有对Lucene的调用,该调用在其中执行了一些I / O)。 这里没有分而治之。从字面上看,我知道 在“模式2”中,我向池提交一个任务,然后在该任务中调用ForkJoinTask.i

  • 如何从线程池中找到60%(或N%)的线程可用性?这背后的逻辑是什么? 父线程使用线程池线程生成多个网址,并等待所有子线程完成。 代码如下所示 父线程 子线程 用于跨线程通信的对象数据 在上述代码中,所需的线程硬编码为: 这种硬编码会导致线程池不足吗?如果线程池中没有可用的线程,会发生什么?如何在托管服务器的线程池中查找可用线程的总数? 谢谢。

  • 我正在使用jersey-client-3.0-SNAPSHOT。 我做一些类似的事情: ...... ...//等待回复并阅读或其他 每次创建和销毁其中一个客户端时,都会出现一个新的线程。 有没有安全的方法来销毁这些线程?这是意料之中的行为吗?我做错什么了吗?