gpt4 book ai didi

spring - 如何配置 Spring Integration 以使用多线程从 Redis 读取?

转载 作者:可可西里 更新时间:2023-11-01 11:23:29 27 4
gpt4 key购买 nike

我正在设置一个 Spring Integration 配置以使用多线程从 Redis 中读取,但是当我运行我的应用程序时,Spring 只创建一个线程。

我正在创建一个 int-redis:queue-inbound-channel-adapter 和一个 executor-task,pool-size= 500 和 queue-capacity=0。

<redis:queue-inbound-channel-adapter
id="fromRedis" channel="privateAggregationExecutorChannel" queue="${instance}_private"
receive-timeout="1000" recovery-interval="3000" expect-message="false" error-channel="distributionErrors"
auto-startup="false" task-executor="robotTaskExecutor"/>

<task:executor
id="robotTaskExecutor"
pool-size="500"
queue-capacity="0"
keep-alive="50"
rejection-policy="CALLER_RUNS" />

<int:service-activator input-channel="privateAggregationExecutorChannel" ref="aggregationExecutor" method="run" />

我不知道我做错了什么,或者我是否遗漏了什么。感谢您的帮助。

最佳答案

没错。 RedisQueueMessageDrivenEndpoint是真正的单线程组件:

@Override
protected void doStart() {
if (!this.active) {
this.active = true;
this.restart();
}
}

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

如你所见只有一个ListenerTask从此 channel 适配器安排。

要使其成为多线程,最好有一个ExecutorChannel。从此 channel 适配器发送消息。这样即使RedisQueueMessageDrivenEndpoint是单线程的,你仍然要进行多线程处理。

我们刚刚意识到,当我们可以使用其他简单方法解决问题时,将并发引入该组件会有点复杂。

另一种方法是有几个<redis:queue-inbound-channel-adapter>相同的定义 queuesame发送 channel 。

关于spring - 如何配置 Spring Integration 以使用多线程从 Redis 读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56377618/

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