параллелизм в одном экземпляре Processor и concurrentConsumers - PullRequest
0 голосов
/ 10 декабря 2018

Если у меня есть такой код:

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 голосов
/ 10 декабря 2018

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...