微服务的其中一个特点是服务之间需要进行网络通信,服务器之间发起调用时调用服务得知道被调用服务的通信地址,试问当微服务数量成百上千之多,程序员该如何管理众多的服务通信地址,对于随时新增加的微服务和下线的微服务,又应该如何去动态添加和删除这些微服务的通信地址呢?所以手工管理服务的通信地址是一件遥不可及的事情,我们需要借助一个强大的工具帮我们实现这一功能 - Eureka,同类型的组件还有 zookeeper,consul等
1.服务的注册:
通俗的说Eureka是一个服务注册与发现组件,说就是用来统一管理微服务的通信地址的组件,它包含了EurekaServer 服务端(也叫注册中心)和EurekaClient客户端两部分组成,EurekaServer是独立的服务,而EurekaClient需要集成到每个微服务中。
微服务(EurekaClient)在启动的时候会向EurekaServer提交自己的服务信息(通信地址如:服务名,ip,端口等),在 EurekaServer会形成一个微服务的通信地址列表存储起来。
2.服务的发现:
微服务中,EurekaClient会定期(30s)的像EurekaServer拉取一份微服务的地址缓存到本地,当有新的微服务调用另一个微服务的时候,会被Eureka发现,并且记录下来。
3.服务的续约:
微服务(EurekaClient)采用定时(默认是30s)向EurekaServer发送服务续约的请求,就是定时的告诉EurekaServer我还活着,不要把我从服务地址清淡中清理出去。如果EurekaClient出现宕机,没有向EurekaServer发送服务续约,EurekaServer会向该服务发送3次间隔30s的心跳请求, 如果在3次当中EurekaClient回复EurekaServer了服务就继续,否则就册中心机会从服务地址清单中剔除该续约失败的服务。
4.服务的下线:
微服务(EurekaClient)关闭服务前向注册中心发送下线请求,注册中心(EurekaServer)接受到下线请求负责将该服务实例从注册列表剔除
springcloud-parent //父项目
pom.xml //父项目的pom
springcloud-eureka-server-1010 //注册中心EurekaServer
springcloud-user-server-1020 //用户服务EurekaClient ,提供者
springcloud-order-server-1030 //订单服务EurekaClient ,消费者
4.0.0
cn.wsx.springboot
springcloud-parent
1.0-SNAPSHOT
springcloud-eureka-server-1010
springcloud-user-server-1020
springcloud-order-server-1030
pom
UTF-8
UTF-8
1.8
org.springframework.boot
spring-boot-starter-parent
2.2.5.RELEASE
org.springframework.cloud
spring-cloud-dependencies
Hoxton.SR3
pom
import
junit
junit
4.12
test
springcloud-parent
cn.wsx.springboot
1.0-SNAPSHOT
4.0.0
springcloud-eureka-server-1010
springcloud-eureka-server-1010
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
org.springframework.boot
spring-boot-starter-web
/
* 注册中心启动类
* @EnableEurekaServer : 开启EurekaServer服务端
*/
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication1010
{
public static void main( String[] args )
{
SpringApplication.run(EurekaServerApplication1010.class);
}
}
server:
port: 1010 #端口
eureka:
instance:
hostname: localhost #主机
client: #客户端配置
registerWithEureka: false #EurekaServer自己不要注册到EurekaServer自己 ,只有EurekaClient才注册
fetchRegistry: false #EurekaServer不要拉取服务的通信地址列表 ,只有EurekaClient才拉取地址列表
serviceUrl: #注册中心的注册地址
defaultZone: http://localhost:1010/eureka/ #http://${eureka.instance.hostname}:${server.port}/eureka/
server:
enable-self-preservation: false #关闭自我保护警告
启动springcloud-eureka-server-1010工程,浏览器访问 http://localhost:1010 ,出现如下界面代码EurekaServer集成成功: