在多线程中执行@Handler方法。

问题描述 投票:0回答:1

需要在多线程环境下执行@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>
java multithreading spring-boot apache-camel
1个回答
0
投票

一般来说,线程安全 就是执行力 - 仅此而已。如果一个给定的方法例程一段代码能够保证共享数据(数据结构等)的操作是线程安全的 安全地 以一种多线程所不具备的方式。贪污 的数据。

因此,这真的取决于你如何结构化地执行一个给定的工作流;这对你能想到的任何其他代码都是一样的。

既然你使用的是Apache Camel,那就看看他们的 线程模型. 如果我没记错的话,你必须定义你的路由工作流,使它们同时运行,通过用 parallelProcessing (CC EIP)、自定义线程池,或者使用分期事件驱动架构(SEDA);这时你需要注意你在处理程序(或任何其他处理共享数据的 "处理器")中的做法,否则你应该可以。

你需要考虑的另一件事是Camel如何使用它的路由引擎来同步或异步地路由消息;要知道同步性和MEP会影响线程模型。

© www.soinside.com 2019 - 2024. All rights reserved.