前言
服务调度方式:
1、使用Http的Resful API 或轻量级发送协议,实现信息传递与服务调用的触发;
2、通过轻量级消息总线上传递消息,类似RabbitMQ等一些提供可靠异步交换的中间件;
#搭建服务注册中心(Eureka-Serve)
- 创建基础的的SpringBoot工程,引入spring-cloud-starter-eureka-server依赖;
- @EnableEurekaServer (服务端注解)注解启动一个服务注册中心,提供给其他服务进行对话;
- 禁用它的客户端注册行为(默认将自身作为客户端进行注册)不向注册中心注册自己eureka.client.register-with-eureka=false
- 注册服务提供者(client)
- 引入依赖spring-cloud-starter-eureka
- 注入DiscoveryClient对象,主类添加@EnableDiscoveryClient(客户端注解);
- 进行服务命名(spring.application.name)和指定服务注册中心(eureka.client.service-url.defaultZone)
高可用注册中心
- 高可用模式:(Eureka-Serve将自己作为服务向其他服务注册中心注册自己,形成一组相互注册的服务注册中心)
spring.application.name=eureka-server
server.port=1111
#高可用集群设置
eureka.instance.hostname=peer1
eureka.client.service-url.defaultZone=http://peer2:1112/eureka/
服务发现和服务消费
- 服务发现:由Eureka的客户端完成;
- 服务消费的任务由Ribbon完成;
- Ribbon 是一个基于Http和Tcp的客户端负载均衡器,可以通过客户端中配置的ribbonServerList服务端列表去轮询访问达到负载均衡的作用
- 服务提供者:
- 服务注册:在启动的时候发送Rest请求将自己注册到 Eureka-Serve上;
- 服务同步:多个服务注册中心相互为服务,服务提供者发送注册请求到一个服务注册中心时,它会请求转发给其他的注册中心,从而实现服务同步;
- 服务续约:服务提供者维护一个心跳告诉Eureka Server “我还活着”
# 续约服务间隔 30S
eureka.instance.lease-renewal-interval-in-seconds=
# 服务失效时间 90S
eureka.instance.lease-expiration-duration-in-seconds=
- 服务注册中心:
- 失效剔除:不一定正常下线的服务实例,为此,Eureka Server 在启动的时候会创建一个定时任务,默认每隔一段时间就会将没有续约的服务剔除;
- 自我保护: 心跳失败的比例在15分钟内是否低于85%,Eurake Server 会将当前实例保护起来,不让其过期,在此期间,实例如果有问题,客户端要有容错机制(例如请求重试,断路器等机制)
#是否开启自我保护
eureka.server.enable-self-preservation=false
参考《Spring Cloud 微服务实战》