需要在多线程环境下执行@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,请查看他们的 threading model 。如果我没记错的话,您必须使用并行处理(CC EIP)、自定义线程池或使用分阶段事件驱动架构(SEDA );那时您需要注意在处理程序(或处理共享数据的任何其他“处理器”)中所做的事情,否则您应该没问题。
您需要考虑的另一件事是Camel如何使用其路由引擎同步或异步路由消息;请注意,同步性和 MEP 会影响线程模型。
关于java - 多线程执行@Handler方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62133788/