我正在将Spring Integration与Redis一起使用。生产者使用RedisQueueOutboundGateway,另一方面接收者使用RedisQueueInboundGateway定义流。
从文档中阅读后,我发现以下句子
任务执行器必须配置多个线程进行处理
我需要并发执行,以加快请求的处理速度,但是即使我像下面这样配置自定义ThreadPoolTaskExecutor,我仍然可以看到总是有一个线程
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(5);
executor.setMaxPoolSize(40);
executor.setQueueCapacity(40);
executor.setThreadNamePrefix("QueueAsyncExecutor-");
executor.initialize();
return executor;
}
并且此线程池的使用是
final RedisQueueInboundGateway rqig = new RedisQueueInboundGateway(finalDestination, jedisConnectionFactory);
rqig.setTaskExecutor(getAsyncExecutor());
最终结果是对请求的顺序处理,所有处理均使用与从日志中看到的相同的线程完成。在这种情况下是否可以启用多线程处理?怎么样?
答案 0 :(得分:1)
是的。 RedisQueueInboundGateway
目前是单线程的。只有一个ListenerTask
:
private void restart() {
this.taskExecutor.execute(new ListenerTask());
}
听起来像我们需要在该concurrency
中引入RedisQueueInboundGateway
选项!随时就此问题提出JIRA,欢迎您提供帮助!
对于同一个Redis队列,您可以通过多个RedisQueueInboundGateway
实例实现人工并发。这样,他们每个人都会开始自己的ListenerTask
。