是camel-cxf消费者多线程以及如何检查组件是否使用多个线程?

时间:2016-11-02 08:28:08

标签: apache-camel

我们在项目中使用camel-cxf作为消费者(肥皂),并问自己是否camel-cxf使用多个线程来响应请求。 我们认为它使用多个线程,对吧?! 但这对于其他路线意味着什么呢?在"来自"之后是多线程的?还是有同步点?

这对" parallelProcessing"意味着什么?或"线程"?

在我们的例子中,我们稍后在路由中使用jdbc组件。 IS camel-jdbc也使用多个线程吗?

如何知道给定组件使用什么线程模型?

1 个答案:

答案 0 :(得分:1)

让我们从你的上一个问题开始:

  

如何一般地了解给定的线程模型   成分

您可能会询问默认情况下哪个组件是单线程的,哪些组件是多线程的?

您需要问自己哪种方法对组件最有意义,并阅读组件的文档。通常,标志会告诉您默认情况下应用的行为。 CXF是一个组件,需要一个Web服务器(在本例中为jetty),以便SOAP(over HTTP)客户端能够调用该服务。 HTTP是无状态协议,Web服务器必须扩展到许多客户端,因此Web服务器是多线程的很有意义。所以是的,对CXF端点的两个同时请求由两个独立的(jetty)线程处理。从CXF端点开始的路由由接收请求的jetty线程同时执行。

相反,如果您要轮询文件系统更改,例如如果要检查某个文件是否已创建,则将多个线程应用于轮询任务是没有意义的。因此file使用者是单线程的。 file消费者用于进行轮询的线程也将执行处理在轮询期间拾取的文件的路由。

如果处理轮询识别的文件与轮询间隔相比需要很长时间,并且您不能错过轮询,那么您需要将剩余路由的处理交给另一个线程,以便进行轮询线程再次自由地做,轮询。输入Threads DSL

然后你有像splitter这样的处理器,可以从一个任务创建许多任务。为了使分离器适用于每个人,必须假设分离器创建的任务不能无序地执行和/或完全相互独立。因此,安全默认设置是在整个执行路由的线程中运行拆分步骤所包含的步骤。但是,如果您的路线作者知道可以相互独立地处理各个拆分项目,那么您可以通过设置parallelProcessing="true"来并行处理拆分步骤所包含的步骤。

线程DSL和使用parallelProcessing="true"都从线程池中获取线程。 Camel为您创建了一个游泳池。但是,如果您想使用多个池或具有不同配置的池,则始终可以supply your own