Closed piemon-nyah closed 7 months ago
版本信息
- Jdk版本:1.8
- SpringBoot版本:2.1.18
- DynamicTp版本:1.1.6.1
- 配置中心版本:/
问题描述
2.7.5以下的dubbo动态线程池似乎无法生效,org.dromara.dynamictp.adapter.dubbo.apache.ApacheDubboDtpAdapter是将DataStore中的线程池替换成了动态线程池 但在dubbo 2.7.5以下的版本, org.apache.dubbo.remoting.transport.dispatcher.WrappedChannelHandler#getExecutorService中并不会通过DataStore获取线程池,而是直接用WrappedChannelHandler中的线程池 由于ApacheDubboDtpAdapter中putAndFinalize方法会关闭原始线程池,导致dubbo调用中只能使用SHARED_EXECUTOR 在2.7.5及以上版本则不会有上述问题, 因为org.apache.dubbo.common.threadpool.manager.DefaultExecutorRepository#getExecutor获取线程池会通过data获取 与dynamictp修改的逻辑一致 测试只有两个线程执行
解决方法
考虑获取WrappedChannelHandler对象,直接修改WrappedChannelHandler中的executor,我自己有尝试改一版,可以提交下pr一起看看
好,指派给你了
版本信息
问题描述
2.7.5以下的dubbo动态线程池似乎无法生效,org.dromara.dynamictp.adapter.dubbo.apache.ApacheDubboDtpAdapter是将DataStore中的线程池替换成了动态线程池 但在dubbo 2.7.5以下的版本, org.apache.dubbo.remoting.transport.dispatcher.WrappedChannelHandler#getExecutorService中并不会通过DataStore获取线程池,而是直接用WrappedChannelHandler中的线程池 由于ApacheDubboDtpAdapter中putAndFinalize方法会关闭原始线程池,导致dubbo调用中只能使用SHARED_EXECUTOR 在2.7.5及以上版本则不会有上述问题, 因为org.apache.dubbo.common.threadpool.manager.DefaultExecutorRepository#getExecutor获取线程池会通过data获取 与dynamictp修改的逻辑一致 测试只有两个线程执行
解决方法
考虑获取WrappedChannelHandler对象,直接修改WrappedChannelHandler中的executor,我自己有尝试改一版,可以提交下pr一起看看