1.1、在微服务项目中微服务架构通过强大的服务发现机制解决了硬编码提供者带来的各种问题。
服务消费者使用这种机制获取服务提供者的网络信息;它有以下几个特点:
- 启动微服务时,需要将各个微服务的网络地址等信息注册到服务发现组件中,这样服务发现便存储了各个服务的信息;
- 服务的消费者可以从服务发现组件中查询到服务提供者的网络地址,并使用该地址调用服务提供者的接口;
- 各个微服务与服务发现组件之间通过一定的机制(心跳)通信,如果服务发现组件长时间无法与某微服务实例通信,就会注销该实例;
- 微服务网络地址发生变更(如:实例增减或者IP端口发生变化等),会重新到服务发信注册,这种方式使服务消费者无需人工修改提供者的网络地址。
spring Cloud提供了多种服务发现组件的支持,如:Eureka,Consul,Zookeeper
1.2、以Eureka为例详细介绍Eureka的组成及运行
1.2.1、图中的几个组件分别表示:
- Application Service:表示服务的提供者;
- Application Client:表示服务的消费者;
- Make Remote Call 表示调用服务接口;
1.2.2、Eureka包括两个组件Eureka Server、Eureka Client 它们的作用如下:
- Eureka Service提供服务的发现能力,各个微服务启动时会向Eureka Server注册自己的信息(如:IP,端口,微服务名称等等),Eureka Server会存储这些信息;
- Eureka Client是一个java客户端,用于简化与Eureka Server的交互;
- 微服务启动后,会通过心跳检测向Eureka Server续约;
- 如果Eureka Server在一定时间内没有收到某个微服务实例地心跳,Eureka Server将会注销该实例(默认90s);
- 默认服务地提供者同时也是服务地消费者,多个Eureka Server实例,互相之间通过复制的方式来实现服务注册表中数据地同步;
- Eureka Client会缓存服务注册表中的信息,这种方式的优势在于微服务不需要每次都请求查询提供者的信息,减轻了Eureka Server 的压力,当Eureka Server所有节点都宕掉,消费者依然可以根据缓存中的信息找到服务提供者并完成调用。
由此看来,Eureka服务可以通过心跳检测,客户缓存等机制,提高了系统的灵活性,可伸缩性和可用性。
常见注解:@EnableEurekaClient:表明是Eureka的Client,通常加在启动类上;
1.2.3、Eureka的常见配置:
- eureka.client.registerWithEureka:表示是否将自己注册到Eureka Server;
- eureka.client.fetchRegister:表示是否从Eureka Server获取注册信息;
- eureka.client.serviceUrl.defaultZone:设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址;
- spring.application.name:用于指定注册到Eureka Server上的应用名称;
- eureka.instance.prefer-ip-address=true:表示将自己的IP注册到Eureka Server;
- security.basic.enable:是否开启基于HTTP basic的认证;true或false;
- security.user.name:配置登录的账号;
- security.user.password:配置登录的密码;
- eureka.client.healthcheck.enable:是否开启健康检查;该配置只能配置在application.yml中
本文参照《Spring+Cloud与Docker微服务架构实战》一书总结!