一个处理器实例和并发消费者中的并发

时间:2018-12-10 15:03:29

标签: java apache-camel

如果我有这样的代码:

Processor myProcessor = new MyProcessor();
CamelContext cContext = new DefaultCamelContext();
cContext.addComponent("jms", new MyJmsComponent());
cContext.addRoutes(new RouteBuilder() {
    @Override
    public void configure() throws Exception {
            from("jms://my-jms-endpoint?concurrentConsumers=5").process(myProcessor);
        }
    });

此代码是否并发?我假设消息由竞争的使用者同时使用,但是myProcessor实例中会发生什么?它是骆驼自动克隆的吗?还是myProcessor被认为是线程安全的,并且消息由单个实例同时处理?还是在此片段中同步消息以按顺序访问myProcessor?如果是后者,我如何实现并发?

1 个答案:

答案 0 :(得分:0)

如果骆驼路线同时使用多个消息,则假设Processor是线程安全的,因为多个使用者可能会同时使用它。

如果您认为那样会对性能产生太大影响(由于可能的锁定机制),则可以创建一个处理器池。尽管不是所有的工作者都能从池中受益(甚至是工作),但这全取决于处理器的功能以及需要线程保护的事情。