Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache camel camel cxf consumer是多线程的吗?如何检查组件是否使用多线程?_Apache Camel - Fatal编程技术网

Apache camel camel cxf consumer是多线程的吗?如何检查组件是否使用多线程?

Apache camel camel cxf consumer是多线程的吗?如何检查组件是否使用多线程?,apache-camel,Apache Camel,我们在项目中使用camelcxf作为使用者(soap),并询问自己camelcxf是否使用多个线程来响应请求。 我们认为它使用多线程,对吗?! 但这对剩下的路线意味着什么呢?所有的多线程都在“from”之后还是有一个同步点 这对“并行处理”或“线程”意味着什么 在我们的例子中,我们稍后在路由中使用jdbc组件。camel jdbc也使用多线程吗 通常如何知道给定组件使用的线程模型?让我们从最后一个问题开始: 一般来说,如何知道给定线程使用的是什么线程模型 组件 您可能会问,默认情况下哪个组件是单

我们在项目中使用camelcxf作为使用者(soap),并询问自己camelcxf是否使用多个线程来响应请求。 我们认为它使用多线程,对吗?! 但这对剩下的路线意味着什么呢?所有的多线程都在“from”之后还是有一个同步点

这对“并行处理”或“线程”意味着什么

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


通常如何知道给定组件使用的线程模型?

让我们从最后一个问题开始:

一般来说,如何知道给定线程使用的是什么线程模型 组件

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

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

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

如果与轮询间隔相比,处理轮询标识的文件需要很长时间,并且您不能错过轮询,那么您需要将路由其余部分的处理交给另一个线程,这样您的轮询线程就可以再次自由地进行轮询。输入

然后,您可以使用类似于拆分器的处理器,它可以从单个任务创建多个任务。要使拆分器为每个人工作,必须假设拆分器创建的任务不能无序执行和/或完全独立。因此,安全的默认设置是在作为一个整体执行路由的线程中运行拆分步骤包装的步骤。但是,如果路由作者知道可以独立处理各个分割项,则可以通过设置
parallelProcessing=“true”
来并行处理分割步骤包装的步骤

线程DSL和using
parallelProcessing=“true”
都从线程池获取线程。Camel为您创建一个池。但是,如果您想使用多个池或具有不同配置的池,则可以始终使用