微服务用 consul 做服务发现,Enable Maintenance Mode(维护模式)应用场景是怎么样的,如何平滑重启注册的rpc服务?

consul 官方文档中注册的服务有个维护模式,具体的应用场景是什么样的呢?

微服务用 consul 做服务发现,Enable Maintenance Mode(维护模式)应用场景是怎么样的?

  • 官方解释(有道翻译)-原文
    This endpoint places a given service into "maintenance mode". During 
    maintenance mode, the service will be marked as unavailable and will not be 
    present in DNS or API queries. This API call is idempotent. Maintenance 
    mode is persistent and will be automatically restored on agent restart.
  • 翻译:
    该端点将给定的服务置于“维护模式”。在维护模式中,该服务将被标记为不可用,
    并且不会出现在DNSAPI查询中。这个API调用是幂等的。维护模式是持久的,
    将在代理重新启动时自动恢复。

我的理解(不知道我的理解对不对)

  • 就是服务注册完,如果服务需要重启的时候,可以先让服务处于:维护模式,重启完成后,再关闭维护模式,这样就可以防止在服务重启的时候,会有请求转发过来,导致报错

然后我测试

  • 起两个rpc服务注册到consul
  • 压测的时候重启其中一个rpc服务,步骤如下:
    • 调用 consul 的 /v1/agent/service/maintenance/:service?enable=true 禁用服务
    • 再重启rpc服务
    • 等rpc服务重启成功,再调用consul 的 /v1/agent/service/maintenance/:service?enable=false 启用服务
  • 但是压测结果发发现,还是有很多失败的请求,看了hyperf日志也是很多连接失败的报错: Connection failed, errCode=xxx

希望用过consul的大佬能够解答一下

讨论数量: 2

你好,这个问题后面有解决吗? 我也遇到类似的问题。 我理解的是,hyperf 在关闭进程时,并不会主动删除注册的服务,而是需要等consul 或者 nacos 客户端心跳没有的时候主动删除服务,这个间隔会有几秒钟,导致服务无法使用

10个月前 评论
第二天堂 (楼主) 10个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!