Когда вы упоминаете опцию concurrentConsumers
(скажем, concurrentConsumers=10
), вы просите Camel создать пул потоков из 10 потоков, и каждый из этих 10 потоков будет получать свое сообщение из очереди pub-sub. и обработать их.
Здесь следует отметить, что при указании параметра concurrentConsumers пул потоков использует фиксированный размер, что означает, что фиксированное число активных потоков все время ожидает обработки входящих Сообщения. Таким образом, 10 потоков (так как я указал concurrentConsumers = 10) будут ожидать обработки моих сообщений, даже если не поступает одновременно 10 сообщений.
Очевидно, это не гарантирует, что входящие сообщения будут обрабатываться в том же порядке. Если вы хотите, чтобы сообщения были в одном и том же порядке, вы можете взглянуть на Resequencer EIP , чтобы упорядочить ваши сообщения.
Что касается вашего третьего вопроса, я не думаю, что Компонент google-pubsub позволяет использовать параллельную обработку. Вы можете сделать свой собственный, используя Threads EIP . Это определенно даст больший контроль над вашим параллелизмом.
Используя потоки, ваш код будет выглядеть примерно так:
from("google-pubsub:project-id:destinationName?maxMessagesPerPoll=20")
// the 2 parameters are 'pool size' and 'max pool size'
.threads(5, 20)
.to("direct:out");