问题描述

SpringCloud服务提供者,设定了随机端口配置后,在EurekaServer中的注册端口、Tomcat的web端口、运行中获取到的server.port配置端口,共出现了4个不同的端口,并且服务消费者使用ribbon时不能通过服务提供者的服务名称进行调用服务

配置信息

spring:
application:
name: client-server
eureka:
client:
service-url:
defaultZone: http://peer1:8761/eureka/
server:
port: ${random.int(8801,8810)}
@RestController
@RequestMapping("/")
public class IndexController { @Value("${server.port}")
private String port; @RequestMapping("hello")
public JSONObject hello() {
JSONObject result = new JSONObject();
result.put("producer", port + " 正在处理");
return result;
}
}

启动EurekaServer和本服务,本服务日志显示如下

com.netflix.discovery.DiscoveryClient    : DiscoveryClient_CLIENT-SERVER/DESKTOP-IND7D5U:client-server:8808: registering service...
com.netflix.discovery.DiscoveryClient : DiscoveryClient_CLIENT-SERVER/DESKTOP-IND7D5U:client-server:8808 - registration status: 204
o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8801 (http) with context path ''
.s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 8801

然后问题来了,打开EurekaServer页,可以看到client-server的注册,client-server出现了8806和8808端口,访问http://localhost:8801/hello,返回的server.port是8805





而且服务消费者用了ribbon,也不能通过"http://CLIENT-SERVER/hello"的方式进行调用,会提示异常信息 I/O error on GET request for "http://CLIENT-SERVER/hello"

结论

猜想可能是random.int的问题,网上搜了下这个问题,找到个类似的文章 springboot使用随机端口暴露的问题解决方法,里面提到并给出了自己实现random.int的方法,让随机端口只生成一次,应该可以解决问题

SpringCloud设置随机端口后的问题的更多相关文章

  1. spring-boot(七) 随机端口

    学习文章:springboot小技巧 随机端口 为Spring Cloud的应用实用随机端口非常简单,主要有两种方法: 设置server.port=0,当应用启动的时候会自动的分配一个随机端口,但是该 ...

  2. socket bind 随机端口

    https://www.cprogramming.com/code_blocks/ 这个地址可以下载c, c++的编译器,在windows下可以用的 IDE. bind到端口0上,系统就会自动分配,但 ...

  3. table表格在设置文字垂直居中后,在表格显示相同排列的数据(比如:testtesttesttsttesttesstestse很多的test)时此表格不能换行

    table设置了垂直居中后在表格显示相同排列的数据(比如:testtesttesttsttesttesstestse很多的test)时此表格不能换行, 此时会导致table会把页面撑的很宽,导致表格后 ...

  4. C# winform解决解决窗体第一次设置为最大化后,点击最大化按钮窗体无法居中问题

    public frmMain() { InitializeComponent(); //解决窗体第一次设置为最大化后,点击最大化按钮窗体无法居中问题 int x = Convert.ToInt32(( ...

  5. Vs2015 win10虚拟机启动问题:无法设置UDP端口 解决方法 合集(转载)

    刚装的vs2015 社区版 出现这个问题,wp8.1和win10m模拟器都无法启动,找了好久找到的解决方案,放这儿供大家参考,免得大家像我一样走弯路: Windows Phone emulator n ...

  6. Flash设置全屏后,放到网页中显示不正常

    stage.displayState = StageDisplayState.FULL_SCREEN;//全屏,注意当设置全屏后,放到网页中显示不正常

  7. [改善Java代码]不要随便设置随机种子

    建议30: 不要随便设置随机种子 随机数在太多的地方使用了,比如加密.混淆数据等,我们使用随机数是期望获得一个唯一的.不可仿造的数字,以避免产生相同的业务数据造成混乱.在Java项目中通常是通过Mat ...

  8. 设置N秒后执行某个方法或函数

    设置N秒后执行一个函数,最常用的是设置一个定时器,今天刚看到有这样一个函数,感觉还是比较简单实用的,就先记下来,免得忘记了. 5秒后执行pushSecondController这个函数 [self p ...

  9. 使用AdvancedInstaller打包web工程设置tomcat端口的方法

    原文:使用AdvancedInstaller打包web工程设置tomcat端口的方法 1.首先,要把你要打包的tomcat下的server.xml文件删掉,因为tomcat自带的serv ...

  10. 在一个没有设置宽高的容器中,为什么设置position:absolute后就可以全屏显示了?

    此场景适用于移动端百分比布局,背景全屏显示. 在一个没有设置宽高的容器中设置背景,想要背景全屏显示,设置bcakground-size:100%;后还需设置position:absolut; 原因: ...

随机推荐

  1. vue2源码学习2vuex&vue-router

    1.vue插件编写 插件可以实现对象vue的拓展,比如新增全局属性/方法,添加实例方法,使用mixin混入其他配置项等等.编写插件必须要实现 install 方法,当调用Vue.use()使用插件时, ...

  2. Vue 数组响应

    响应渲染 在Vue中,被渲染的数据都是响应式的,即Vue实例中进行改变页面中也会跟着改变: <body> <div id="app"> <p>{ ...

  3. linux交叉编译libiconv

    1.解压libiconv-1.14.tar 2.进入解压后目录libiconv-1.14 3.执行交叉编译环境命令,例如: source /home/huhe/environment-setup-aa ...

  4. QTcpSocket 设置接收数据延时等待时间

    /* 客户端接入槽函数 */ void TcpServer::slotNewConnect(void) {/* 获取连接的客户端句柄 这里设置刷新数据时间 1ms */ QTcpSocket *pSo ...

  5. xorg 屏幕分辨率设置(x11分辨率设置/linux分辨率设置)

    记录一下,用于linux虚拟机分辨率设置.https://blog.csdn.net/weixin_36084095/article/details/116839103(在谷歌搜索是简书的文章,在百度 ...

  6. 动手学强化学习 第二章 多臂tiger机问题 阅读笔记

    第二章 多臂tiger机问题 第一节 简介 强化学习是一种试错型学习范式. 第二节 问题介绍 多臂tiger机(multi-armed bandit,MAB)不存在状态信息,只有动作和奖励.有一个拥有 ...

  7. Antlr语法优化过程记录

    背景 Modelica Spec中的语法文件在Antlr下表现很糟糕,至少是1个数量级的糟糕的性能表现 理论 语义谓词减慢速度 ATN图中多分支转换为单分支 可选放在词法开头和语法的结尾 避免前导可选 ...

  8. win/ubuntu/centos 安装后台监控工具btop

    之前linux平台进行后台监控一直是简单的看top,但界面太难看而且需要记的缩写太多而且不直观(对于我来说),后面有尝试替换htop,扩展支持了鼠标操作以及直观监控,但是界面还是难看,今天查找了一下发 ...

  9. yarn 安装全局包

    yarn 安装全局包,无法使用,需要添加yarn的bin文件夹到环境变量 然后重启一下即可使用,再装其他全局包也可直接使用

  10. Vue的v-html指令说明,含案例

    v-html指令总结: 1.作用:向指定节点中渲染包含html结构的内容 2.与插值语法的区别: (1)v-html 会替换掉节点中所有的内容,{{}}则不会 (2)v-html 可以识别html 结 ...