我们有一个服务调用,它返回一个id列表,我们用它调用另一个服务,该服务一次只接受一个id,因此我们使用的是驼峰分割器,并行处理转换为true
。现在,我们通过seda调用该服务,因此可以设置超时。这将导致并行处理不再是并行的问题,因为seda默认只有1个并发使用者在处理它。
选项:
在1和2中,哪一个更好?
首先,在拆分器上将流设置为 true
对于大消息很有用。这意味着它将以块的形式拆分输入消息。这减少了内存开销。因此,这将提高大型消息的性能。
要使seda
队列真正并行处理,您需要设置seda
路由,如下所示。
<from uri="seda:report?multipleConsumers=true&concurrentConsumers=16"/>
这将允许路由为并发消费者使用最多16个线程。seda
组件不实现任何类型的持久性或恢复,如果VM在消息尚未处理时终止,它们将丢失。如果您需要持久性、可靠性或分布式seda
,请尝试使用jms
或actiemq
< code>direct组件是同步的,根据文档,不推荐使用对多个使用者的支持。从Camel 2.1开始:直接endpoint不支持多个消费者。
另一个选项是vm
组件。vm
组件与seda
component的不同之处在于,
支持跨
实例的通信,因此您可以使用此机制跨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