Java apachecamel中Seda的并发消费者

Java apachecamel中Seda的并发消费者,java,multithreading,concurrency,apache-camel,Java,Multithreading,Concurrency,Apache Camel,我有下面提到的路线。路由定期轮询一个目录,并读取一个大的.csv文件。然后,它将文件分成1000行,并将其发送到seda队列(firstQueue)。我有15个并发消费者在这个轿车队列中 route.split().tokenize("\n", 1000).streaming().to("seda:firstQueue?concurrentConsumers=15").process(myProcessor).to("seda:secondQueue?concurrentConsumers=15

我有下面提到的路线。路由定期轮询一个目录,并读取一个大的.csv文件。然后,它将文件分成1000行,并将其发送到seda
队列(firstQueue)
。我有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
是一个单例,如果我将其更改为prototype,将会发生什么

2) 是否有可能任意两个或多个线程拾取相同的数据并将其传递给
myProcessor
?或者可以保证没有两个线程具有相同的数据吗


感谢您的快速回复。谢谢

我的骆驼有点生锈了,但我敢肯定

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

  • 两个线程不应从队列中拾取相同的消息。在正常运行中,每条消息只需处理一次。但是,有一些错误情况会导致同一条消息被处理两次,最明显的一个错误是,在处理文件的过程中,您会部分重新启动应用程序


  • 谢谢马特的回复。那么,既然SEDA基本上是一个“阻塞队列”,那么是否可以确保没有两个线程具有相同的消息副本?此外,一旦线程从队列中拾取消息,该消息将立即从队列中删除?是的,阻塞队列就是它的本来面目。一旦一个线程拾取一条消息,它将立即从队列中删除,这样其他线程就不会拾取同一条消息。还有一个问题,尽管我定义了15个concurrentConsumer,但我只看到1个线程(由myProcessor)处理消息。知道为什么会发生这种情况吗?恐怕我一点也不知道。我使用的是一个相当旧的驼峰版本-2.10.1。是否有人知道此版本中的seda和concurrentConsumers是否存在问题,并且可能已在以后的版本中修复?