Это верно. RedisQueueMessageDrivenEndpoint
действительно однопоточный компонент:
@Override
protected void doStart() {
if (!this.active) {
this.active = true;
this.restart();
}
}
private void restart() {
this.taskExecutor.execute(new ListenerTask());
}
Как вы видите, только один ListenerTask
запланирован из адаптеров этого канала.
Чтобы сделать его многопоточным, лучше иметь ExecutorChannel
для отправки сообщений от этого канального адаптера. Таким образом, даже если RedisQueueMessageDrivenEndpoint
является однопоточным, вы все равно будете иметь многопоточную обработку.
Мы только что поняли, что введение параллелизма в этот компонент будет немного сложнее, когда мы можем обойти другой простой способ.
Другой подход заключается в том, чтобы иметь несколько <redis:queue-inbound-channel-adapter>
определений для одного и того же канала queue
и same
для отправки.