【发布时间】:2023-04-03 09:30:01
【问题描述】:
如果我有这样的代码:
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 是否假定为线程安全的,并且消息由单个实例同时处理?还是在这个 sn-p 中消息同步以按顺序访问 myProcessor?如果是后者,如何实现并发?
【问题讨论】:
-
如果骆驼路由同时消费多条消息,处理器被认为是线程安全的。如果您觉得这会对性能影响太大,也许您可以创建一个处理器池
-
谢谢安东尼。如果处理器被假定为线程安全的,那么创建处理器池将如何提高性能?
-
线程安全类通常嵌入一些锁定机制。在某些情况下,使用工人池会有所帮助。并非所有工作人员都可以从池中受益(甚至工作),这完全取决于处理器的作用以及需要线程安全的事情是什么
-
好的,所以我知道潜在的性能影响只会来自处理器的某些特定实现。请发表您的评论作为答案,我会接受。
-
没问题 ;) 很高兴它有帮助
标签: java apache-camel