在微服务开发中,一个项目可能涉及到多个,甚至几十个服务,如果每一个服务都需要我们手动指定端口,可能管理起来比较麻烦。于是,便可以使用随机端口,因为微服务调用是通过服务名称进行调用的。例如:
@Service public class HelloService { /** * 使用Spring内置的工具 */ @Autowired private RestTemplate restTemplate; public String hiService(String name) { // SERVICE-HI 根据服务名进行调用,不能使用IP地址进行调用 return restTemplate.getForObject("https://SERVICE-HI/hi?name="+name,String.class); } }
其中,SERVICE-HI是在Eureka中映射到一个或多个具体服务地址信息(IP+端口)。
Spring Boot有两种方式去设置使用随机端口,分别如下:
在 application.properties 文件中将 server.port 设置为 0。如下:
server.port=0
Spring Boot会随机分配一个端口。
注意:
这种方式在向Eureka注册时会出现问题。如果你启动多个实例,那么这些实例所有的ID都是相同的。如:yourPC:service-name:0,此时我们需要手动设置实例ID。如下:
eureka.instance.instance-id=${spring.application.name}:${random.int}
这样每次都会产生一个不同的实例ID。
通过 random.int 随机生成一个端口。如下:
server.port=${random.int[8080,8999]}