至此,已经实现了一个用户微服务和电影微服务,并在电影微服务中使用RestTemplate调用用户微服务中的RESTfulAPI。一切都是那么的自然、简单、perfect!
那么真的完美吗?来分析一下电影微服务的代码,在MovieController.java中:
由代码可知,我们是把提供者的网络地址(IP和端口等)硬编码在代码中的,当然,也可将其提取到配置文件中去。例如:
代码改为:
在传统的应用程序中,一般都是这么做的。然而,这种方式有很多问题,如下所示。
●适用场景有局限:如果服务提供者的网络地址(IP和端口)发生了变化,会影响服务消费者。例如,用户微服务的网络地址发生变化,就需要修改电影微服务的配置,并重新发布。这显然是不可取的。
●无法动态伸缩:在生产环境中,每个微服务一般都会部署多个实例,从而实现容灾和负载均衡。在微服务架构的系统中,还需要系统具备自动伸缩的能力,例如动态增减节点等。硬编码无法适应这种需求。
那么要如何解决这些问题呢?请大家继续阅读下去。