我们正在使用由JdbcMessageStore支持的队列通道和聚合器。
一段时间内所有工作正常,并且在请求更多的情况下,聚合器不会轮询来自聚合器输入通道的消息。应用重新启动后,就会发生聚合。
请帮忙。我们是线程不足还是正在发生什么?
这是配置结构,
alert(foo);
答案 0 :(得分:1)
很难说仅由配置执行的操作,但是看起来您的rejection-policy="DISCARD"
不好:您将丢失一个新任务,当大小为40
的内部队列被拒绝时,您将丢失数据已经满了。考虑改用CALLER_RUNS
。
此外,尚不清楚为什么在它们之间总是只有一个队列通道...例如,routerChannel
也已经是一个队列,为什么startChannel
也是一个队列。当某些进程可以简单地发生在同一线程并调用堆栈时,没有理由通过队列通道处理所有事情。
我也担心队列通道,因为它们都是可轮询的通道,并且在某些地方配置了轮询器。并且那个基于TaskScheduler
,默认情况下只有10个线程池:https://docs.spring.io/spring-integration/docs/5.0.7.RELEASE/reference/html/configuration.html#namespace-taskscheduler。因此,当所有这些计划的线程都繁忙并且没有能力从队列通道轮询更多消息时,这可能会使您陷入困境。