Multithreading Spring集成-任务执行器卡住
我正在开发一个已经存在的Spring集成代码,它正在被卡住 下面的代码正在被删除。从sql查询中提取大约20000条记录并发送到splitter 代码: 编辑2: 我的问题是否与以下链接中提到的问题相关:Multithreading Spring集成-任务执行器卡住,multithreading,spring-integration,Multithreading,Spring Integration,我正在开发一个已经存在的Spring集成代码,它正在被卡住 下面的代码正在被删除。从sql查询中提取大约20000条记录并发送到splitter 代码: 编辑2: 我的问题是否与以下链接中提到的问题相关: 另外,我不清楚轮询器的接收超时属性。接收超时是轮询器(reqExecutor)线程在队列通道中等待消息到达的时间。如果在没有消息到达后过期,线程将返回池 如果消息到达,它将在线程上处理,然后线程返回池 如果您无法从线程转储中解决问题,请将其发布到某个地方(不是这里-可能太大)-pastebi
另外,我不清楚轮询器的接收超时属性。接收超时是轮询器(
reqExecutor
)线程在队列通道中等待消息到达的时间。如果在没有消息到达后过期,线程将返回池
如果消息到达,它将在线程上处理,然后线程返回池
如果您无法从线程转储中解决问题,请将其发布到某个地方(不是这里-可能太大)-pastebin或github gist。在执行一些代码优化后,问题得到解决。代码中有两个主要问题:
感谢Geek和Gary帮我解决问题。更改这些参数只会将瓶颈转移到其他地方。您甚至可以通过获取所有记录来解决问题。那么,在解决此类问题方面有什么建议或最佳做法吗?您可以尝试此配置的几种排列方式,但问题可能出在这些配置之外。除非您解决了实际问题,否则其他问题可能会出现阻塞。添加了有关此问题的更多更新。你能帮我一下吗?我想你是说“卡住”而不是“被击中”。如果是这样,最好的调试方法是进行线程转储以查看线程正在做什么。一般来说,这样的问题是由用户代码中的线程阻塞引起的。
<int-jdbc:outbound-gateway query="..." />
<int:splitter input-channel="..." output-channel="queueChannel"/>
<int:channel id="queueChannel">
<int:queue capacity="25" />
</int:channel>
<int:service-activator ref="..."
input-channel="queueChannel" output-channel="..." method="xxx">
<int:poller max-messages-per-poll="25" fixed-delay="100"
receive-timeout="30000" task-executor="reqExecutor"/>
</int:service-activator>
<task:executor id="reqExecutor" pool-size="25" queue-capacity="5" rejection-policy="CALLER_RUNS" />
Received no Message during the poll, returning 'false'