spring cloud微服务不定期会出现网络请求失败的错误。于是看了下后台日志,发现有几个请求会报如下的异常:

Caused by: feign.RetryableException: Connection refused (Connection refused) executing POST http://oauth/oauth/token******at feign.FeignException.errorExecuting(FeignException.java:67)at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:104)at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:76)at feign.hystrix.HystrixInvocationHandler$1.run(HystrixInvocationHandler.java:108)at com.netflix.hystrix.HystrixCommand$2.call(HystrixCommand.java:302)at com.netflix.hystrix.HystrixCommand$2.call(HystrixCommand.java:298)at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:46)... 26 more

(调用流程是user服务调用oauth服务)
一开始很奇怪,为什么有的请求可以成功,有的不可以。因为服务编排用的是Docker Compose,所以第一反应是编排服务的时候,oauth的hosts忘加了(后来才想起来请求用的是Feign,根本不需要管hosts,RestTemplate才需要,mdzz)。在docker-compose.yml里加上以后,并没有卵用。
然后到Consul上看了一下,oauth服务确实是在线的。(不过后面的passing数量不是2,是6,这里因为已经移除了失效的,所以只剩下2个)

然后就开始怀疑人生了,为什么服务在线却访问不到呢,用Eureka的时候才出现过这个问题,难道Consul也有?那我辛辛苦苦切换过来还有什么意义!然后我就盯着那个数字6看,产生了一个疑问:哪里来的6个oauth实例?这个时候才想到,可能是Feign负载均衡拿到了“假”的oauth实例,所以才请求失败。点开Consul的Node列表看了一下,发现有6个oauth躺在那里,然而只有2个是可用的。

不应该啊,Consul不应该把无效的服务注销掉吗?

这是因为:当在Spring Cloud应用中使用Consul来实现服务治理时,由于Consul不会自动将不可用的服务实例注销掉(deregister),这使得在实际使用过程中,可能因为一些操作失误、环境变更等原因让Consul中存在一些无效实例信息,而这些实例在Consul中会长期存在,并处于断开状态。它们虽然不会影响到正常的服务消费过程,但是它们会干扰我们的监控,所以我们可以实现一个清理接口,在确认故障实例可以清理的时候进行调用来将这些无效信息清理掉。

在consul的官网上:https://www.consul.io/api/agent/service.html (果然遇到问题就应该先去找官方文档啊!)

解决办法:调用deregister接口

用PUT请求Consul 的这个deregister接口,附上实例的id就可以成功注销掉实例了(注意是实例的id,不是服务名,即服务名+一段唯一字符串。有ACL认证的Consul需要在Header上加token,否则会报permission denied)如下图:

示例:put方式访问http://1XX.XX.xx.250:8500/v1/agent/service/deregister/trade-1xx-xx-206-101-18090

接着看到这个服务的实例数量……难道要一个一个请求吗?

当然不是,配合下面这个实例列表接口,批量删除吧!

示例:查看list service如下:http://1XX.XX.XX.250:8500/v1/agent/services
上面是列出所有的service。
可以用下面的
http://172.29.206.250:8500/v1/health/state/critical,返回的json中都是失败的service,再删除它。

服务注册发现consul之五:Consul移除失效服务的正确姿势相关推荐

  1. python consul配置中心_微服务注册发现配置中心-consul

    Consul详解 近期在微服务业务中用的注册中心,在此简单记录下以备后用. 一 概述 1.1 概念 Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置.Con ...

  2. consul 日志配置_微服务:服务注册发现+ API 网关+配置中心+服务跟踪+服务熔断...

    服务注册发现 服务注册就是维护一个登记簿,它管理系统内所有的服务地址.当新的服务启动后,它会向登记 簿交待自己的地址信息.服务的依赖方直接向登记簿要 Service Provider 地址就行了.当下 ...

  3. 微服务注册发现集群搭建——Registrator + Consul + Consul-template + nginx

    在互联网应用领域,服务的动态性需求十分常见,这就对服务的自动发现和可动态扩展提出了很高的要求. 微服务系统动辄上万个服务,而且还要动态伸缩.以人工写好的IP.Port 硬编码脚本的方式无法做到大规模自 ...

  4. k8s consul 服务发现_Swoft之服务注册发现Consul服务器配置

    Consul服务器配置 微服务带来最大的好处就是把整个大项目分割成不同的服务,运行在不同服务器上,实现解耦和分布式处理.微服务虽然有很多好处,但是也会有不好的一方面.任何事物都会有两面性,在微服务里面 ...

  5. SpringCloud微服务-服务注册发现-负载均衡-服务调用-服务降级-服务网关-配置中心-消息总线-消息驱动-链路追踪-alibaba-nacos-sentinel-seata理论原理分析

    SpringCloud理论技术 概述 ​ Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.消息总 ...

  6. 服务注册发现与kit实践

    服务注册发现 在微服务的架构当中,服务发现是比较常见的一个方式来保证服务的动态上线下线的机制,可以通过封装一定的库来对某一个服务进行调用时无感知,动态管理当前提供服务的机制,这样同一个服务可以注册多个 ...

  7. Spring RSocket:基于服务注册发现的 RSocket 负载均衡

    作者 | 雷卷 来源|阿里巴巴云原生公众号 RSocket 分布式通讯协议是 Spring Reactive 的核心内容,从 Spring Framework 5.2 开始,RSocket 已经是 S ...

  8. gradle 指定springcloud 版本_springcloud小技能:服务注册发现如何隔离

    用过dubbo的都知道,dubbo服务发布&订阅有2个重要的参数:version和group.即消费者和生产者不但需要要接口名完全一致,还需要version和group也完全一致,才能成功的匹 ...

  9. 微服务架构 | 服务注册发现中心/配置中心/消息总线 - [nacos]

    INDEX §1 简介 §2 简单使用 §2.1 搭建 nacos-server §2.2 作为服务注册发现中心 §2.3 作为服务配置中心 §2.4 切换 nacos 的一致性协议 §3 配置的层次 ...

  10. 《微服务系列:Eureka服务注册发现中心》

    说在前头:本人为大二在读学生,书写文章的目的是为了对自己掌握的知识和技术进行一定的记录,同时乐于与大家一起分享,因本人资历尚浅,能力有限,文章难免存在一些错漏之处,还请阅读此文章的大牛们见谅与斧正.若 ...

最新文章

  1. 机器学习笔记:感知器
  2. windows 版 arm-elf-gcc(转)
  3. MAT之GUI:GUI的方式创建/训练/仿真/预测神经网络
  4. NYOJ 678 最小K个数之和
  5. Linux系统没有home分区,我的linux系统home分区挂不上了
  6. StereoBM::disp12MaxDiff Crash the Release
  7. 管理信息系统属于计算机的什么应用领域,全国2013自考《管理系统中计算机应用》...
  8. Spring中的@scope注解
  9. ubuntu 下更新pip后发生 ImportError: cannot import name 'main'的问题解决
  10. Linux编程获取本机IP地址
  11. Lynn/ Online digital filters for biological signals: some fast designs for a small computer
  12. BZOJ 1632: [Usaco2007 Feb]Lilypad Pond
  13. 常见API漏洞解释以及应用层解决方案
  14. Windows C语言开发环境实践
  15. error C2143: 语法错误 : 缺少“;”(在“template”的前面)
  16. Ubuntu 搭建强大的 IDE —— Vim + Vundle + 插件
  17. 计算机软件的著作权和专利权法律保护资料
  18. android 忘记密码代码,Android-忘记签名文件的密码怎么办
  19. 记录一个dell服务器的系统重装
  20. Youtube Data API使用简介

热门文章

  1. elasticSearch入门到java操作api一套搞定
  2. 需求用例分析之七:业务用例之小结
  3. mysql的从节点能否执行事务_MySQL执行事务的语法与流程详解
  4. java 日期的工具类_java 日期时间工具类
  5. nodejs渐入佳境[8]-json处理
  6. iOS面试题02-UI篇
  7. 分页刷新(SwipeRefreshLayout+SwipeMenuRecyclerView)
  8. LeetCode 之Two Sum
  9. centos下apache源码编译安装
  10. mysql高可用集群——MHA架构