Apache Camel提供了两种使用线程池的解决方案:from("seda:stageName?concurrentConsumers=5").process(...)
和from("direct:stageName").thread(5).process(...)
我想知道,两种解决方案之间有什么区别?只是两种写同一件事吗?有哪些用例?
最佳答案
SEDA组件seda: component
提供异步SEDA行为,以便在BlockingQueue上交换消息,并在到生产者的单独线程中调用使用者。
直接成分
当生产者发送消息交换时,direct: component
提供对任何使用者的直接,同步调用。该端点可以用于连接现有路由,或者与路由器在同一JVM中的客户端要访问路由时,可以使用该端点。
线程池和并发使用者之间的区别
线程池是一个可以根据负载在运行时动态增加/缩小的池,并发使用者始终是固定的。
就您而言
对于并发使用者-from(“seda:stageName?concurrentConsumers = 5”)。process(...)
对于线程池-from(“direct:stageName”)。thread(5).process(...)
使用什么
现在,如果您始终希望有5个线程可用,请使用Concurrent Consumers
,并且如果您希望根据负载使线程可用(但不超过5个)
然后使用Thread Pool
。
关于java - “seda + concurrentConsumers”和 “direct + threads”有什么区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19511630/