服务的注册与发现
在微服务架构中,服务的发现和注册至关重要。服务提供者、服务消费者、服务发现组件的关系大致如下:
- 各个微服务在启动时,将自己的网络地址等信息注册到服务发现组件中,服务发现组件会存储这些信息。
- 服务消费者可从服务发现组件查询服务提供者的网络地址,并使用该地址调用服务提供者的接口。
- 各个微服务与服务发现组件使用一定机制通信。服务发现组件如长时间无法与某微服务实现通信,就会注销该实例。
- 微服务网络地址发生变更时,会重新注册到服务发现组件。使用这种方式服务消费者就无需人工修改提供者的网络地址了。
Eureka简介
Eureka是Netflix开源的服务发现组件,本身是一个基于REST的服务。它包含server和client两部分。可以用它来实现微服务的注册与发现。
Eureka原理和作用
- Eureka Server 提供服务发现的能力,各个微服务启动的时候,会向Eureka Server中注册自己的信息,一些ip、端口、名称等等。Eureka Server 会存储这些消息。
- Eureka Client 是一个java客户端,用于简化和Server的交互。
- 微服务启动后,会周期性的(默认30s)向Eureka Server发送心跳消息以续约。
- 如果Eureka Server一段时间没有收到某个微服务的心态,那么Eureka Server将会注销该实例。(90秒后)
- 默认情况下,Eureka Server也是 Eureka Client。多个Eureka Server实例,互相之间通过复制的方式,来实现注册表中数据的同步。
- Eureka Client 会缓存注册表中的信息。保证即使Eureka Server 无响应挂掉之后,能正常在缓存中找到服务提供者信息。
编写Eureka Server
本文用到的springboot版本为2.2.2.RELEASE
,springcloud版本为Hoxton.SR1
创建一个springboot项目
添加Eureka Server的起步依赖。
在启动类上加入@EnableEurekaServer
注解,声明这是一个Eureka Server 服务。
将application.properties改成application.yml,然后写入以下配置
server:
port: 8000
eureka:
client:
register-with-eureka: false #表示是否将自己注册到Eureka Server。
fetch-registry: false #表示是否从Eureka Server 拉取信息。默认为true,因为这是一个单节点的Eureka Server,所以不需要。
service-url:
defaultZone: http://localhost:8000/eureka/ #表示与Eureka Server 交互的地址。查询服务和注册服务都需要用到这个地址。多个地址可用逗号分隔。
这样一个Eureka Server 已经编写完成了,是不是很简单呢。然后启动项目,访问http://localhost:8000/
编写Eureka Client 注册到 Eureka Server
新建一个项目,或者将Server的项目拷贝过来。在启动类上添加@EnableDiscoveryClient
注解。pom文件不用变。
也可以用@EnableEurekaClient
注解,@Enabl