我们在我们的项目中使用camel-cxf作为使用者(soap),并问自己camel-cxf是否使用多个线程来响应请求。我们认为它使用多个线程,对吗?!但这对剩下的路线意味着什么呢?是否所有多线程都在"from“之后,还是存在同步点?
这对"parallelProcessing“或”线程“意味着什么?
在我们的例子中,我们稍后在路由中使用jdbc组件。camel是否也使用多个线程?
一般情况下,如何知道给定组件所使用的线程模型?
发布于 2016-11-03 10:03:34
让我们从你的最后一个问题开始:
一般情况下,如何知道给定组件所使用的线程模型?
您可能会问,默认情况下哪个组件是单线程的,哪些组件是多线程的?
您需要问自己哪种方法对组件最有意义,并阅读组件的文档。通常,这些标志会告诉您默认应用了什么行为。CXF是一个组件,它需要一个web服务器(在本例中为jetty ),以便SOAP (overHTTP)客户端能够调用服务。HTTP是一种无状态协议,web服务器必须扩展到多个客户端,因此对web服务器进行多线程处理是很有意义的。因此,是的,对CXF端点的两个同步请求由两个单独的(jetty)线程处理。从CXF端点开始的路由由接收请求的jetty线程同时执行。
相反,如果您正在轮询文件系统更改,例如要检查某个文件是否已创建,则将多个线程应用于轮询任务是没有意义的。因此,file使用者是单线程的。file使用者用于进行轮询的线程也将执行您的路由,该路由处理在投票过程中获取的文件。
如果处理轮询标识的文件比轮询间隔时间长,而且不能错过轮询,那么您需要将剩下的路由处理交给另一个线程,这样您的轮询线程就可以再次自由地进行轮询。输入线程DSL。
然后就有了像splitter这样的处理器,它可以从单个任务中创建许多任务。要使拆分器为每个人工作,必须假定拆分器创建的任务不能无序执行和/或完全相互独立。因此,安全默认情况是在执行整个路由的线程中运行由拆分步骤包装的步骤。但是,如果路由作者知道可以相互独立地处理各个拆分项,则可以通过设置parallelProcessing="true"来并行处理由拆分步骤包装的步骤。
线程DSL和使用parallelProcessing="true"的线程都从线程池中获取线程。骆驼为你创造了一个游泳池。但是,如果您想使用多个池或具有不同配置的池,则可以始终使用供应你自己。
https://stackoverflow.com/questions/40375360
复制相似问题