Closed yyjdelete closed 7 years ago
我记得是有健康检查的,10秒钟检查一次,如果监控检查成功则会重新分配请求。是否等待了10秒以上的时间呢? 代码https://github.com/RabbitTeam/RabbitCloud/blob/master/src/Rabbit.Rpc/Runtime/Client/HealthChecks/Implementation/DefaultHealthCheckService.cs
等了10s的. Health的状态是改变了, 请求会被重新路由到这个服务器上来. 但之前连接过, 已经断开了的Channel没有重连, 也没有被从缓存中移除, 后续的操作其实一直都是在发送给这个已经关闭了的Channel.
另外刚去看了下dev分支, 感觉完全不一样啊(没试有没有这个问题)
我晚些时候测试看看。 dev分支是2.0版本会有大改可以不用管。
那我就不发PR了, 我那个提交也不知道有没有改出别的什么问题:-)
可以pr上来,我看看。
我确实发现了问题,感谢你的反馈。 这个问题我看你增加了代码
那个catch是改成同步建立连接, 来捕获连接失败的情况.(不含断开)
DefaultChannelHandler那里一个是增加了ChannelInactive
连接断开事件的处理,
另外一个改动是改GetAttribute
, 主要是怀疑每次连接都动态修改ActionChannelInitializer
, 同时建立多个连接的时候可能存在线程安全的问题, 所以就改成用DotNetty的相应机制来存储
好的,已经完成合并。另外这个项目v2准备进行,如果你有时间可以参与进来给点意见。
问题是如果服务端离线后恢复或连接失败, 而客户端之前访问过此服务端, 那么后续请求将持续的请求给这个已离线的连接(即使后续网络已恢复), 而不会重新
另外
DotNettyTransportClientFactory
这里重设Bootstrap.Handler()不知道有没有线程安全的问题