我有一条路线,如下所述。该路由以固定的时间间隔轮询目录并读取大的.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?还是可以保证没有两个线程具有相同的数据?

赞赏快速反应。谢谢!

最佳答案

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


有15个线程在运行。每个人将从队列中读取一条消息并调用myProcessor。我的处理器只有一个实例,因此您需要确保它是线程安全的。我从未尝试过,但是我不相信将范围更改为原型不会有任何不同。
两个线程不应从队列中接收相同的消息。在正常运行中,每个消息应只处理一次。但是,在某些错误情况下,我导致同一条消息被处理两次,最明显的情况是您通过处理文件的方式重新启动了应用程序。

关于java - Seda在Apache Camel 中的并发消费者,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38420369/

10-10 06:37