需要在多线程环境下执行@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会影响线程模型。