前一章, 我们的Hello world应用服务,通过配置服务器Config Server获取到了我们配置的hello信息“hello world”. 但自己的配置文件中必须配置config server的URL(http://localhost:8888), 如果把config server搬到另外一个独立IP上, 那么作为一个client的hello world应用必须修改自己的bootstrap.yml中的config server的URL地址。这明显是不够方便的。
既然config server已经注册到了eureka服务中心,能否让服务中心自动帮hello world应用找到它需要的config server呢? 答案是肯定的。我们的hello world应用只需要提供它需要的配置所在在的config server的名字就可以了, 在前面例子中,配置服务的名字就是“config-server”。那我们现在就把之前的服务和应用稍作修改, 来达到自动发现服务的方案。下图是Spring Cloud提供的服务发现机制。Config-server是其中的Service Provider, Config-client是Service Consumer, 它们都注册到服务中心Eureka Server。
1. 将config-server注册到服务中心
config-server本身就是一个Spring Boot应用, 可以直接参考, 将config-server注册到eureka server中。访问http://localhost:8761, 可以看到我们的config-server已经注册。
2. 修改hello world应用的配置
1).同样,需要将Hello 我让你的应用注册到eureka 服务中心, 配置方法同前面一样, 不在赘述。
2).修改配置文件,将config-server的URL硬编码机制改成,通过服务中心根据名字自动发现机制, 修改bootstrap.yml
1 eureka: 2 client: 3 serviceUrl: 4 defaultZone: http://localhost:8761/eureka/ 5 spring: 6 application: 7 name: config-client 8 cloud: 9 config:10 label: master11 profile: dev12 # uri: http://localhost:8888/13 discovery:14 enabled: true15 serviceId: config-server16 management:17 security:18 enabled: false19 server:20 port: 8881
我们注释掉了硬编码的config-server的URL配置, 取而代之的是服务注册中心的地址http://localhost:8761/eureka/以及配置服务的名字“config-server”, 同时打开自动发现机制discovery.enable = true. 我们在运行一下hello world应用, 可以发现, GIT里面的内容依然可以访问。此时我们的hello world应用已经完全不知道配置服务的地址,也不知道配置的内容, 所有这些都通过服务注册中心自动发现。
3. 当服务很多时,都需要同时从配置中心读取文件的时候,这时我们可以考虑将配置中心做成一个微服务,并且将其集群化,从而达到高可用,架构图如下: