Если у меня есть такой код:
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? Клонируется ли он автоматически Camel? Или myProcessor считается потокобезопасным, а сообщения обрабатываются одновременно одним экземпляром? Или сообщения синхронизируются для последовательного доступа к myProcessor в этом фрагменте? В последнем случае как добиться параллелизма?
Спасибо, Энтони. Если предполагается, что процессор является потокобезопасным, как можно повысить производительность за счет создания пула процессоров?
Потокобезопасный класс часто включает в себя какой-либо блокирующий механизм. При определенных обстоятельствах может помочь использование пула рабочих. Не все рабочие могут получить пользу (или даже работать) с пулом, все зависит от того, что делает процессор и какие вещи должны быть потокобезопасными.
Хорошо, поэтому я понимаю, что потенциальное влияние на производительность может возникнуть только от конкретной реализации процессора. Пожалуйста, оставьте свой комментарий в качестве ответа, и я приму его.
Нет проблем;) рад, что помогло




Если верблюжий маршрут потребляет несколько сообщений одновременно, предполагается, что Processor является потокобезопасным, потому что несколько потребителей могут использовать его одновременно.
Если вы чувствуете, что это слишком сильно повлияет на производительность (из-за возможного механизма блокировки), возможно, вы можете создать пул процессоров. Хотя не все рабочие могут получить пользу (или даже работать) с пулом, все зависит от того, что делает процессор и какие вещи должны быть защищены потоками.
Если верблюжий маршрут потребляет несколько сообщений одновременно, процессор считается потокобезопасным. Если вы чувствуете, что это слишком сильно повлияет на производительность, возможно, вы можете создать пул процессоров.