一、前因

最近在做公司的一个微服务项目,技术架构为spring cloud + consul + SSM。

当我写完一个功能要在本地测试时,发现服务运行成功,但是前后端联调报500错误。

当时的第一个想法就是gateway服务的问题,但是其他同事却说gateway服务没毛病。

最后想到可能是注册中心的问题,于是访问consul的管理页面。服务是注册上了,但是一眼就能看到毛病:

居然是内网IP!!我惊了!

检查日志信息发现,向注册中心发送注册地址,为内网ip地址:

那么就找到问题原因了。

二、问题

先回想了一下注册中心原理(以前用的是Eruka,不过原理都是大同小异的):

  1. 服务提供者启动后,发送自己的信息到注册中心进行注册
  2. 服务提供者每隔一段时间会想注册中心发送心跳,证明自己还活着,没有挂掉!(默认90s)
  3. 服务调用者第一次调用服务提供者时,会向注册中心拉取一份服务提供者的地址,并缓存在本地(下次用可以直接从本地取)
  4. 当服务提供者不可用时,注册中心会将这个服务提供者信息同步到订阅过这个服务的服务消费者。

查阅了一些资料,consul的原理如下图:

和Eruka基本差不多,只是consul不是由服务提供者发送心跳,而是由注册中心访问服务提供者的健康检查链接,以此来判断服务提供者是否还存活!

清晰明了!真正的问题就是:我的服务用局域网链接向consul注册健康检查链接,我能访问consul,但consul肯定是访问不到我的局域网IP来对我服务进行健康检查,因此判断我的服务挂了

因为和其他同事不在一个地方办公,我这里拿到的资料很不全,仅仅只有一个服务的代码和需求文档。连数据库、redis、consul等的地址账号密码,都是自己从项目配置文件中找的。

而他们的办公环境是和公司服务器在一个局域网的,所以他们不会出现我这个问题。

三、解决

因为我本地连接了wifi,需要内网穿透才能将本机暴露出去。

这太麻烦了,所以我将服务打包到了自己的阿里云服务器。

但是,这里也有坑:Consul在不写ip_address配置项的情况下,默认从第一网卡取地址值。而阿里云的第一个网卡就是内网ip。

eth0,eth1,eth2……代表网卡一,网卡二,网卡三……

直接拿服务器的外网ip,在配置文件中指定:

spring:
cloud:
consul:
host: ${CONSUL_HOST}
port: ****
discovery:
hostname: ${spring.cloud.client.ip-address}
instance-id: ${spring.application.name}:118.***.***.**:${spring.application.instance_id:${server.port}}
service-name: ${spring.application.name}-app
#check失败后,多少秒后删除本服务
health-check-critical-timeout: 30s
#显示ip地址
prefer-ip-address: true
ip-address: 118.***.***.**

搞定!打包上传服务器运行,注册成功

【SpringCloud】consul注册中心注册的服务为内网(局域网)IP的更多相关文章

  1. 【Java】Web 服务编程技巧与窍门: 在 UDDI 注册中心为 Web 服务注册开发 UDDI Java 应用程序

    本技巧建立了一个使用统一描述.发现和集成 (Universal Description, Discovery, and Integration,UDDI) 来注册应用程序级消费的 Web 服务实例.作 ...

  2. Dubbo中多注册中心问题与服务分组

    一:注册中心 1.场景 Dubbo 支持同一服务向多注册中心同时注册, 或者不同服务分别注册到不同的注册中心上去, 甚至可以同时引用注册在不同注册中心上的同名服务. 2.多注册中心注册 中文站有些服务 ...

  3. Dubbo多注册中心和Zookeeper服务的迁移

    一.Dubbo多注册中心 1. 应用场景 例如阿里有些服务来不及在青岛部署,只在杭州部署,而青岛的其它应用需要引用此服务,就可以将服务同时注册到两个注册中心. consumer.xml <?xm ...

  4. spring cloud系列教程第八篇-修改服务名称及获取注册中心注册者的信息

    spring cloud系列教程第八篇-修改服务名称及获取注册中心注册者的信息 本文主要内容: 1:管理页面主机名及访问ip信息提示修改 2:获取当前注册中心的服务列表及每个服务对于的服务提供者列表 ...

  5. Dubbo系列之 (二)Registry注册中心-注册(1)

    引导 dubbo的服务的注册与发现,需要通过第三方注册中心来协助完成,目前dubbo支持的注册中心包括 zookeeper,consul,etcd3,eureka,nacas,redis,sofa.这 ...

  6. Dubbo系列之 (二)Registry注册中心-注册(2)

    引导 本章主要介绍下AbstractRegistry.FailbackRegistry的作用和源码. AbstractRegistry 首先,直接引出这个类的作用,该类主要把服务提供者信息缓存本地文件 ...

  7. 使用nproxy代理本地服务到内网

    前端开发中:很多场景需要在局域网下的其他手机或设备查看网页, 问题来了, web服务部署在本机的某个端口上(8080),只能通过本机浏览器访问,  怎样能让局域网下的其他设备也访问呢?可能你会说 关闭 ...

  8. Spring Cloud(Dalston.SR5)--Eureka 注册中心高可用-服务提供和消费

    由于 Eureka 注册中心只是在内存中保存服务注册实例,并且没有将服务注册实例进行同步,因此我们需要对服务提供和消费进行调整,需要指定服务提供和消费的注册.服务发现的具体Eureka 注册中心配置, ...

  9. nacos注册中心配置命名服务不生效问题

    nacos作为注册中心指定命名空间,配置如下: 但是启动之后发现服务都默认注册到了public这个命名空间下面,也就是指定的命名空间不生效 这是因为注册中心使用的命名空间的配置不是nacos.conf ...

  10. dubbo-admin与多注册中心(注册中心集群)

    在使用dubbo时,注册中心是一个必要的架构组成成员.当我们的注册中心没有采取集群时,如何在dubbo-admin中配置,我们可以根据dubbo官方文档,很快找到我们的答案. 但是当注册中心集群之后怎 ...

随机推荐

  1. JavaScript学习01 语言简介、基本使用和变量声明

    JavaScript语言简介.基本使用和变量声明 JavaScript是网景(Netscape)公司开发的一种基于客户端浏览器.面向对象.事件驱动式的网页脚本语言. JavaScript的前身叫Liv ...

  2. 前台js分页,自己手写逻辑2

    //设置分页 var pageSize = 10; //设置一次显示多少页 var pageLimit = 5; $(function(){ $.post("rest/rtdbfix/lis ...

  3. httpd的警告

    1. httpd: apr_sockaddr_info_get() failed for serv05 这个是因为httpd.conf文件没有定义ServerName,所以会用hostname来代替, ...

  4. selenium借助AutoIt识别上传文件Java篇

    官方网站:https://www.autoitscript.com/site/ 从网站上下载AutoIt并安装,安装完成在菜单中会看到图4.13的目录: 图4.13  AutoIt菜单 1.首先打开A ...

  5. c++课程设计之菜单选择

    a) 从键盘输入n个数,选择升序还是降序输出 b)创新了日历 c) 添加了射箭游戏 d)还加入了好玩的24点游戏     学生签名:  年  月   日   课程设计(论文)评阅意见 等 级 项    ...

  6. [js高手之路]html5 canvas动画教程 - 边界判断与小球粒子模拟喷泉,散弹效果

    备注:本文后面的代码,如果加载了ball.js,那么请使用这篇文章[js高手之路] html5 canvas动画教程 - 匀速运动的ball.js代码. 本文,我们要做点有意思的效果,首先,来一个简单 ...

  7. java垃圾回收的分类

    1.线程数 分为串行垃圾回收器和并行垃圾回收器.串行垃圾回收器一次只使用一个线程进行垃圾回收:并行垃圾回收器一次将开启多个线程同时进行垃圾回收.在并行能力较强的 CPU 上,使用并行垃圾回收器可以缩短 ...

  8. 2019最新迅为-i.MX6Q开发板资料目录

            迅为IMX6开发板: Android4.4系统  Linux + Qt5.7系统  Ubuntu12.04系统 部分案例:HMI:3D打印机:医疗设备:工控机:触控一体机:车载终端 核 ...

  9. 莫烦scikit-learn学习自修第六天【特征值矩阵标准化】

    1.代码实战 #!/usr/bin/env python #!_*_coding:UTF-8 _*_ import numpy as np from sklearn import preprocess ...

  10. 真实项目中VS2015中自建T4模板生成文件的使用

    有可能许多小伙伴们发现,vs2015和2012的自带T4模板中的.tt文件改变非常之多,如果仅仅copyEF系统自己生成的模板文件,那可累了.以下是我自己整理的在2012和2015中都可以试用的代码. ...