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/

10-10 07:25