java - 多线程执行@Handler方法

标签 java multithreading spring-boot apache-camel

需要在多线程环境下执行@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/

相关文章:

c++ - 从 boost::threads 到 boost::asio 计时器

C11 GCCthreads.h 未找到?

java - 逐步构建对象,同时避免空值

Java - 何时使用 notify 或 notifyAll?

Java 按字母顺序对列表进行排序,末尾值为 "Other"

java - 数据库未在实体类上使用注释创建

java - 包含导致 SpringRunner contextLoad 错误的 com.intuit.karate 依赖项

java - 对 AWS EC2/EBS 资源使用较长的 ID

java - GUI 未按预期显示

java - 可以覆盖 Java webstart 对话框标题吗?