注册中心
文章目录
Eureka
基础知识
服务治理:管理服务和服务之间的依赖关系,可以实现服务调用,负载均衡,容错等,实现服务发现和注册。
Server提供服务注册,Client通过注册中心进行访问。
若Server在多个心跳周期中未收到某个节点的心跳,就会在服务注册表中将这个服务节点移除。
配置服务端Server
引入Server依赖
eureka:
instance:
hostname: localhost #eureka服务器的实例名称
client:
register-with-eureka: false #是否注册自己
fetch-registry: false #仅注册 维护服务实例 而不需要检索服务
# 和eureka交互的地址
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eurekas/
主启动类要加 @EnableEurekaServer
配置客户端Client
引入Client依赖
eureka:
client:
register-with-eureka: true #是否从Server抓取已有的注册信息,单点无所谓,集群必须为true才能负载均衡 f
etch-registry: true
service-url:
defaultZone: http://localhost:7001/eureka
加**@EnableEurekaClient**
Eureka集群
- server配置—高可用—多个server相互注册
eureka:
instance:
hostname: eureka7001.com #eureka服务器的实例名称
client:
register-with-eureka: false #是否注册自己
fetch-registry: false #仅注册 维护服务实例 而不需要检索服务
# 和eureka交互的地址
service-url:
defaultZone: http://eureka7002.com:7002/eurekas/
相互注册
- client配置—
service-url:
defaultZone: [http://eureka7002.com:7002/eureka,http://eureka7001.com:7001/eureka](http://eureka7002.com:7002/eureka,http:/eureka7001.com:7001/eureka)
服务集群
配置和之前的服务基本一样,注意端口号即可。
在注入RestTemplate上要加上**@LoadBanlance**开启负载均衡。
细节完善
eureka下面加
instance: instance-id: payment8001
即可更改eureka上显示的服务名称
instance: prefer-ip-address: true
即可让访问信息有ip信息提示
服务发现Discovery获取服务信息
在主启动类加**@EnableDiscoveryClient**开启。
注入DiscoveryClient类的对象。可用它的方法获得具体信息。
自我保护机制
一旦进入自我保护,就不会再进行清理服务信息,即使服务已经不再可用。
防止出现Client可以正常运行但是与server网络不通时,将client服务剔除。
默认情况下,server90秒没有收到服务的心跳就会将他注销。当server在短时间内失去过多服务,就会进入自我保护机制。
如何禁止自我保护机制
server: enable-self-preservation: false eviction-interval-timer-in-ms: 2000
已经停止更新!!!
Zookeeper
分布式协调中心
提供者
-
引入依赖
-
yml配置
spring: application: name: cloud-provider-payment cloud: zookeeper: connect-string: 192.168.136.140:2181
-
主配置类上加**@EnableDiscoveryClient**
-
controller
消费者
基本一样,不过主启动类要注入RestTemplate类的实例,controller中用它请求提供者的服务。
Consul
简介
开源的分布式服务发现和配置管理系统,go语言开发。包含服务治理、配置中心和控制总线等功能,包含了一种完整的服务网络解决方案。
优点:基于raft协议,简洁;支持健康检查,同时支持HTTP和DNS协议,支持跨数据中心的WAN集群,有图形界面,支持多平台,可存储键值对,多数据中心。
安装
在consul.exe目录下打开cmd,直接输入consul agent -dev即可启动consul,访问8500端口即可进入图形界面。
提供者
-
引入依赖
-
yml配置
spring:
application:
name: consul-consumer-order
cloud:
consul:
host: localhost
port: 8500
discovery:
service-name: ${spring.application.name}
-
主启动类加**@EnableDiscoveryClient**
-
controller
消费者
基本一样,但是主启动类要加入注入RestTemplate的实例,在controller用它调用提供者的服务。