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

camel拆分器并行处理

严知
2023-03-14

我们有一个服务调用,它返回一个id列表,我们用它调用另一个服务,该服务一次只接受一个id,因此我们使用的是驼峰分割器,并行处理转换为true。现在,我们通过seda调用该服务,因此可以设置超时。这将导致并行处理不再是并行的问题,因为seda默认只有1个并发使用者在处理它。

选项:

    < li >放一个?seda上的concurrent consumers = x < li >使用direct而不是seda。(没有超时选项?) < li >还有其他选择吗?

在1和2中,哪一个更好?

共有1个答案

淳于开畅
2023-03-14

首先,在拆分器上将流设置为 true 对于大消息很有用。这意味着它将以块的形式拆分输入消息。这减少了内存开销。因此,这将提高大型消息的性能。

要使seda队列真正并行处理,您需要设置seda路由,如下所示。

<from uri="seda:report?multipleConsumers=true&amp;concurrentConsumers=16"/>

这将允许路由为并发消费者使用最多16个线程。seda组件不实现任何类型的持久性或恢复,如果VM在消息尚未处理时终止,它们将丢失。如果您需要持久性、可靠性或分布式seda,请尝试使用jmsactiemq

< code>direct组件是同步的,根据文档,不推荐使用对多个使用者的支持。从Camel 2.1开始:直接endpoint不支持多个消费者。

另一个选项是vm组件。vm组件与sedacomponent的不同之处在于, 支持跨 实例的通信,因此您可以使用此机制跨web应用程序进行通信。

因此,如果您需要并行处理,则< code>direct组件没有用。如果需要跨< code>CamelContent实例发送消息,则使用< code>vm,否则使用上述< code>seda。

 类似资料:
  • 使用Camel拆分数组列表,并在多达10个线程中并行处理每个项目。以下是配置。线程池配置文件被设置为最大线程数=10。 bean:reportRepository?method=getPendingTransactions获取ArrayList并传递给Splitter。 是处理项目的处理器。 问题:当作业开始时,它正在启动10个线程,但是一些线程正在拾取同一个项目。例如,如果我在数组列表中有ite

  • 我在spring xml中定义了以下路由,以拆分文本文件中的行,并将每一行发送到JMS队列 如果我将“to”uri替换为“direct”endpoint,那么无论拆分器中是否使用threadpool都可以传递拆分消息 为了使JmsComponent与Splitter+ThreadPool一起工作,JmsComponent中是否需要任何特殊设置?或者我错过的任何其他配置? =========2015

  • 我们在Camel中定义了一个具有拆分和聚合功能的路由,但无法在聚合器之后将异常传播回拆分。这导致即使我们遇到异常,拆分也会运行 下面是不工作的代码 上述代码中的处理器(myProcessor)如下: 但是,当我从路由中移除聚合时,Split能够在异常情况下停止路由。

  • 我只有一个具有大xml文件最后顺序的文件,而不是许多小xml文件。你能告诉我出了什么问题吗?太感谢你们了!

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

  • eCaused by:org.apache.camel.InvalidPayloadException:没有类型为:org.apache.camel.Exchange的可用正文,但其值为:11484类型为:java.lang.String on:message:11484。原因:没有类型转换器可用于将类型:java.lang.String转换为所需的类型:org.apache.camel.exch