关于总线服务端口与java端口不匹配的一些猜想与测试

发布时间 2023-09-06 11:38:16作者: 月落天白,船动莲开

首先,在部署项目的时候碰到了一些问题,我先描述一下问题:

 

项目是部署到总线上的一个端口的,在yaml文件中这样配置

serviceBus:
  port:6666
subscene: "public"
scene_inst: 1
version: 1
sname: "wodexiangmu"

就简单写一下端口,这样我们的服务在运行的时候会请求一个6666的总线端口,但是总线端口对于服务运行在改端口会有一些规则限制:首先一个服务请求端口后,这个端口将会被该服务永久占用,除非服务器重启,这是出于一些保护机制(猜测),因为我们运行在改端口的服务如果碰到不可抗力中断运行了,那我们下次在访问这个服务请求总线端口的时候,万一改端口被占用就会一直注册不了,导致我们的服务需要修改端口。
在最开始设计时用的是port=0的模式这样的话当我每次请求服务的时候,总线就会随机分配一个空闲的没被占用的地址,不过后来就发现每次随机一个地址的话在有一些需要安全访问问题(涉及内部)上不太适合,因为安全访问的话,必须固定总线端口。
于是问题就产生了,我先利用上方配置总线端口6666,运行后,查看后端服务的日志显示,发现一直无法在总线上注册,但是服务能正常运行,接口测试也能正常使用,就非常难受,于是我重新设置端口7777,并通过showservicelocator | grep wodefuwu查看运行服务端口号,发现能注册能注册上去,就很惊喜,以为可以用了,但退出后重新运行又不行了,猜测可能是第一段所描写规则限制的原因。
于是继续写了段手动拉取总线端口的接口
ServicePublishImpl myService = new ServicePublishImpl();// 接口实现类
ret = serviceManage.Mng_ServiceDispatch(port, myService, 60 * 1000);

填写端口port8888,发现能正常占用改端口但是再次访问就会导致端口不匹配,证明了之前总线只能访问一次端口后一直留着的猜想,但是再次注册的服务名和之前一样却也是不能注册,目前并不知道总线是如何进行识别各个服务的。
不过在以上的测试中,发现一个问题,就是如果自己的java端口和总线端口的的端口号一致的话,是绝对不能正常注册到总线那边的。而如果不一样的话才能注册到总线那边。