目录
前言Eureka简介架构栗子Eureka Server集群配置系统hostsapplication.yml文件启动Eureka Server实例 将微服务注册到Eureka Server上用户认证将微服务注册到有用户认证的Eureka Server上 Eureka的自我保护模式前言
以下类容来自书籍《Spring Cloud与Docker微服务架构实战(第2版)》
Eureka简介
Eureka是一个服务发现组件,基于REST的服务,包含了server和client两部分。在springcloud之下的一个子项目,用于注册微服务的注册与发现。
架构
上面是Eureka的架构图
Eureka本身也是一个服务,也可以是一个集群。
图中的Application Service和Application Client就是服务提供者和消费者。
Make Remote Call是调用RESTful API的行为。
各个微服务启动时会向Eureka Server发送自身的信息(ip、端口号等),Eureka Client就是一个java客户端,可以是服务消费者、服务提供者、也可以是Eureka Server。
微服务启动后,会周期性(默认30秒)向Eureka Server发送心跳为自己续期。默认90秒没有接收到某个微服务的心跳,则会注销该微服务(实例)。
Eureka Client会缓存服务注册表中的信息,减轻Eureka Server的压力。
栗子
Eureka Server集群
配置系统hosts
windows系统在C:\Windows\System32\drivers\etc下修改hosts文件,追加信息127.0.0.1 peer1 peer2
application.yml文件
spring:application:name: microservice-discovery-eureka-ha---spring:profiles: peer1 # 指定profile=peer1server:port: 8761eureka:instance:hostname: peer1 # 指定当profile=peer1时,主机名是peer1client:serviceUrl:defaultZone: http://peer2:8762/eureka/# 将自己注册到peer2这个Eureka上面去---spring:profiles: peer2server:port: 8762eureka:instance:hostname: peer2client:serviceUrl:defaultZone: http://peer1:8761/eureka/
这是将两个配置文件合并为一个,在启动时,只需指定不同的profiles来启动对应的实例即可 ,(- - -)是连接符。
启动Eureka Server实例
打包后,根据–spring.profiles.active=peer1和–spring.profiles.active=peer2启动两个Eureka Server实例
java -jar microservice-discovery-eureka-ha-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer1java -jar microservice-discovery-eureka-ha-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer2
启动成功后在浏览器访问http://peer1:8761/和http://peer2:8762/,则会在registered-replicas中看到对方的互备节点
将微服务注册到Eureka Server上
修改服务提供者的配置文件
server:port: 8000spring:application:name: microservice-provider-user # 指定注册到Eureka Server上的应用名称jpa:generate-ddl: falseshow-sql: truehibernate:ddl-auto: nonedatasource: # 指定数据源platform: h2 # 指定数据源类型schema: classpath:schema.sql # 指定h2数据库的建表脚本data: classpath:data.sql # 指定h2数据库的数据脚本logging: # 配置日志级别,让hibernate打印出执行的SQLlevel:root: INFOorg.hibernate: INFOorg.hibernate.type.descriptor.sql.BasicBinder: TRACEorg.hibernate.type.descriptor.sql.BasicExtractor: TRACEeureka:client:serviceUrl:defaultZone: http://localhost:8761/eureka/instance:prefer-ip-address: true # 是否将ip注册到Eureka Server
添加依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>
启动服务提供者,观察Eureka Server
用户认证
添加依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency>
修改配置文件
security:basic:enabled: true# 开启基于HTTP basic的认证user:name: user # 配置登录的账号是userpassword: password123 # 配置登录的密码是password123server:port: 8761# 指定该Eureka实例的端口eureka:client:registerWithEureka: falsefetchRegistry: falseserviceUrl:defaultZone: http://user:password123@localhost:8761/eureka/
启动Eureka Server服务,访问时需要填写用户信息
将微服务注册到有用户认证的Eureka Server上
eureka:client:serviceUrl:defaultZone: http://user:password123@localhost:8761/eureka/
Eureka的自我保护模式
Eureka Server在一定时间(默认90秒)没有接受到某个微服务实例的心跳,则注销改实例。但当短时间类丢失过多客户端时(网络分区故障),微服务本身却是健康的,则进入自我保护模式,不会注销任何一个微服务实例。
可通过以下方式禁用自我保护模式
eureka:server:enable-self-preservation: false
如果觉得《Spring Cloud Netflix-微服务注册与发现(Eureka)》对你有帮助,请点赞、收藏,并留下你的观点哦!