springboot服务注册到Eureka,端口总是默认8080,自己配置端口不生效

这段时间接手了一个公司的老项目,用的是SpringCloud,在我用的时候突然发现有一个服务,注册到Eureka后,界面显示的端口和实际Ribbon调用的实例端口是不一致的,后来我自己写了个端口获取了一下所有的实例信息,方法如下

java 复制代码
@RestController
public class TestController {
    @Resource
    private DiscoveryClient discoveryClient;

    @RequestMapping("getServicesList")
    @ResponseBody
    public Object getServicesList() {
        List<List<ServiceInstance>> servicesList = new ArrayList<>();
        //获取服务名称
        List<String> serviceNames = discoveryClient.getServices();
        for (String serviceName : serviceNames) {
            //获取服务中的实例列表
            List<ServiceInstance> serviceInstances = discoveryClient.getInstances(serviceName);
            servicesList.add(serviceInstances);
        }
        return servicesList;
    }
}

这个可以获取当前注册到Eureka的所有实例信息。

我获取到以后发现端口和配置的端口不一致。

java 复制代码
[{
 "host": "147.20.1.14",
 "port": 8080,
 "serviceId": "IICS-TIMER",
 "uri": "http://147.20.1.14:8080",
 "metadata": {},
 "secure": false,
 "instanceInfo": {
  "instanceId": "147.20.1.14:8094",
  "app": "IICS-TIMER",
  "appGroupName": null,
  "ipAddr": "147.20.1.14",
  "sid": "na",
  "homePageUrl": "http://147.20.1.14:8080/",
  "statusPageUrl": "http://147.20.1.14:8080/info",
  "healthCheckUrl": "http://147.20.1.14:8080/health",
  "secureHealthCheckUrl": null,
  "vipAddress": "iics-timer",
  "secureVipAddress": "iics-timer",
  "countryId": 1,
  "dataCenterInfo": {
   "@class": "com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo",
   "name": "MyOwn"
  },
  "hostName": "147.20.1.14",
  "status": "UP",
  "leaseInfo": {
   "renewalIntervalInSecs": 30,
   "durationInSecs": 90,
   "registrationTimestamp": 1678328929647,
   "lastRenewalTimestamp": 1678328929647,
   "evictionTimestamp": 0,
   "serviceUpTimestamp": 1678328878377
  },
  "isCoordinatingDiscoveryServer": false,
  "metadata": {},
  "lastUpdatedTimestamp": 1678328929647,
  "lastDirtyTimestamp": 1678328929069,
  "actionType": "ADDED",
  "asgName": null,
  "overriddenStatus": "UNKNOWN"
 }
}]

通过这个可以看到实例端口和实例id是不一致的,后来通过查看源码发现了问题。

在Debug注册Eureka的时候我发现他获取了一个nonSecurePort的端口,然后通过点击发现他是获取的当前配置的server.port端口,也就是咱们设置的端口,如果没有获取到的话就用默认的8080。

不知道因为什么原因导致的eureka读取server.port不生效,但是通过查阅资料我们可以通过强制给nonSecurePort赋值的方式绑定端口。

java 复制代码
eureka.instance.nonSecurePort=8094

直接在配置文件里添加这个配置,配置nonSecurePort参数即可。

相关推荐
希望永不加班几秒前
SpringBoot 配置 HTTPS(自签名证书+正式证书)
java·spring boot·后端·spring·https
sunwenjian88610 分钟前
微服务搭建----springboot接入Nacos2.x
spring boot·微服务·架构
小马爱打代码15 分钟前
Spring Boot内嵌容器深度解析:Tomcat是如何被启动的?
spring boot·后端·tomcat
小江的记录本18 分钟前
【反射】Java反射 全方位知识体系(附 应用场景 + 《八股文常考面试题》)
java·开发语言·前端·后端·python·spring·面试
孟陬18 分钟前
国外技术周刊 #4:这38条阅读法则改变了我的人生、男人似乎只追求四件事……
前端·人工智能·后端
没有bug.的程序员25 分钟前
100%采样率引发的全线熔断:Spring Boot 链路追踪的性能绞杀与物理级调优
java·spring boot·后端·生产·熔断·调优·链路追踪
无籽西瓜a29 分钟前
Linux 文件权限与 chmod 详解
linux·服务器·后端
thulium_1 小时前
Rust 编译错误:link.exe 未找到
开发语言·后端·rust
SimonKing1 小时前
IntelliJ IDEA 配置与插件全部迁移到其他盘,彻底释放C盘空间
java·后端·程序员
华科易迅1 小时前
Spring 代理
java·后端·spring