Apache骆驼的Seda的并发消费者

时间:2016-07-17 10:43:06

标签: java multithreading concurrency apache-camel

我有一条如下所述的路线。路由定期轮询目录并读取大型.csv文件。然后它将文件分成1000行的块并将其发送到seda queue(firstQueue)。我在这个seda队列中有15个并发消费者。

route.split().tokenize("\n", 1000).streaming().to("seda:firstQueue?concurrentConsumers=15").process(myProcessor).to("seda:secondQueue?concurrentConsumers=15").process(anotherMyProcessor);

1)15个并发消费者意味着什么 - 这意味着15个线程从seda读取数据并将其传递给myProcessor的一个实例?或者创建了15个单独的myProcessor实例,每个实例都作用于同一个数据副本?请注意myProcessor是单身,如果我将其更改为原型会发生什么。

2)是否有可能两个或多个线程选择相同的数据并将其传递给myProcessor?或者是否保证没有两个线程具有相同的数据?

欣赏快速回复。谢谢!

1 个答案:

答案 0 :(得分:2)

我的骆驼有点生锈,但我很确定

  1. 有15个线程正在运行。每个人都会从队列中读取一条消息并调用myProcessor。我的处理器只有一个实例,因此您需要确保它是线程安全的。我从来没有试过它,但我不相信将范围改为原型会有所作为。

  2. 两个线程不应从队列中获取相同的消息。在正常运行中,每条消息应该只处理一次。但是,有一些错误情况导致我在同一条消息中的结果被处理两次,最明显的一种情况是您在处理文件的过程中重新启动应用程序。