在多线程中执行@Handler方法



需要在多线程环境中执行@Handler(import org.apache.camel.Handler(方法。 下面是我当前的代码和 CamelRoute.xml 文件。任何想法或建议都是可观的。

@Component("messagehandler")
public class HandleMessages {   
@Handler
public void handle(String body, Exchange exchange) throws Exception { 
// do some business operation
}
}

<?xml version="1.0" encoding="UTF-8"?>
<routes xmlns="http://camel.apache.org/schema/spring"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
<route id="IncomingRoute">
<from uri="someSourceURL" />       
<to uri="bean:messagehandler" />
<log message="Message Body - ${body}" />
</route>
</routes>

一般来说,线程安全就是执行- 仅此而已。给定的方法/例程/代码段是线程安全的,如果它保证对共享数据(数据结构等(的操作多个线程不会损坏该数据的方式安全地进行。

因此,这实际上取决于您如何构建给定工作流的执行;对于您能想到的任何其他代码段也是如此。

由于您使用的是Apache Camel,请查看它们的线程模型。如果我没记错的话,您必须使用parallelProcessing(CC EIP(、自定义线程池或使用分阶段事件驱动架构 (SEDA( 以并发运行的方式定义路由/工作流;此时,您需要注意在处理程序(或任何其他处理共享数据的"处理器"(中执行的操作,否则您应该没问题。

您需要考虑的另一件事是Camel如何使用其路由引擎同步或异步路由消息;请注意,同步性和MEP会影响线程模型。

最新更新