SpringCloud设置随机端口后的问题
2024-10-21 14:44:51
问题描述
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的方法,让随机端口只生成一次,应该可以解决问题
最新文章
- JVM执行Java程序时内存的划分
- WCF入门(10)
- 一个基于和围绕Docker生态环境构建的早期项目列表
- 简易的JQuery设置Cookie
- CentOS下几种软件安装方式
- Docker镜像与仓库(一)
- linuxmint更改权限
- matlab中的sub2ind函数
- Mysql表的约束设计和关联关系设计
- 终于开始我的java旅程了!
- mybatis教程3(映射文件)
- 无法访问 MemoryStream 的内部缓冲区
- leetcode235
- EXCEPTION-IBATIS
- mongodb-win32-i386-3.0.6 使用
- How to add a button in the seletions ";More";
- MDI多文档窗体续
- [ActionScript 3.0] 通过BitmapData将对象保存成jpg图片
- SQL Server UDF to pad a string
- Synchronized介绍