Apache Camel ProducerTemplate - PullRequest
       22

Apache Camel ProducerTemplate

0 голосов
/ 18 ноября 2018

Привет, я использую Apache Camel + Spring и определил конфигурацию как

.
public class MyOrderConsumerRouterBuilder extends RouteBuilder implements InitializingBean, ApplicationContextAware{

@Override
    public void configure() throws Exception {
        from("seda:asyncChannel?concurrentConsumers=20").id("asyncProcessChannelFromId")
    .to("bean:OrderProcessManager?method=processOrders").id("asyncProcessChannelToId");
    }
}

Является ли этот источник многопоточным? Я вижу, что потребителей много. В моем случае это : concurrentConsumers = 20

Я проверил ниже URL

Как настроить максимальный размер кэша по умолчанию для ProducerCache или ProducerTemplate

Согласно исходному коду DefaultCamelContext.createProducerTemplate () DefaultCamelContext DefaultProducerTemplate создается с MaximumCacheSize (по умолчанию 1000)

В соответствии с этим я понимаю, что может быть несколько производителей, которые определяются с помощью MaximumCacheSize в качестве LRU. В моем случае у меня есть только одна конечная точка, т.е. SEDA, поэтому будет только один производитель.

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

1 Ответ

0 голосов
/ 21 ноября 2018

Производитель не многопоточный , но есть несколько производителей.

В вашем случае 20 потребителей (потоков) ждут сообщений. Если сообщение приходит, оно обрабатывается в соответствии с определением маршрута одним из этих потоков.

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

Пока нет сплиттеров, агрегаторов и подобных EIP, один поток "пропускает" сообщение по вашему маршруту и ​​в вашем случае, наконец, отправляет сообщение бину OrderProcessManager. Таким образом, этот шаг создания (вызов метода bean), очевидно, выполняется одним потоком для одного сообщения.

НО, поскольку вы можете иметь до 20 потоков, обрабатывающих сообщения параллельно, бин OrderProcessManager может вызываться до 20 производителями (потоками) параллельно.

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