gpt4 book ai didi

spring - 使用 RedisQueueInboundGateway 进行多线程处理

转载 作者:IT王子 更新时间:2023-10-29 06:12:44 25 4
gpt4 key购买 nike

我正在将 Spring Integration 与 Redis 结合使用。生产者使用 RedisQueueOutboundGateway,而在另一侧,接收者使用 RedisQueueInboundGateway 定义流。

阅读文档我发现了下面这句话

The task-executor has to be configured with more than one thread for processing

我的需求是并发执行,以加快请求的处理速度,但我可以看到始终有一个线程,即使我像下面这样配置了一个自定义 ThreadPoolTask​​Executor

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());

最终结果是请求的顺序处理,所有这些都是使用同一个线程完成的,正如我从日志中看到的那样。在那种情况下是否可以启用多线程处理?怎么办?

最佳答案

没错。 RedisQueueInboundGateway 目前是单线程的。只有一个ListenerTask:

private void restart() {
this.taskExecutor.execute(new ListenerTask());
}

听起来我们需要在 RedisQueueInboundGateway 中引入 concurrency 选项!欢迎就此事提出 JIRA,欢迎贡献!

您可以为同一个 Redis 队列使用多个 RedisQueueInboundGateway 实例实现人工并发。这样他们每个人都会启动自己的 ListenerTask

关于spring - 使用 RedisQueueInboundGateway 进行多线程处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53395644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com