springCloud-服务注册中心eureka

服务注册中心eureka

首先引入的依赖 版本跟随springboot

## spring cloud
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-dependencies</artifactId>
    <version>${spring-cloud.version}</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
## eureka-server
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

启动添加注解@EnableEurekaServer来作为服务注册主机启动

配置文件,这里使用properties文件

server.port=8763 
## eureka实例名称
eureka.instance.hostname=localhost
## 多个注册中心相互注册 客户端也使用这个参数来配置
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/

客户端连接时

添加注解@EnableEurekaClient作为客户端注册

用户认证

##开启用户校验
security.basic.enabled=true
## 用户
spring.security.user.name=admin
## 密码
spring.security.user.password=admin

客户端再注册时需要加上用户名和密码,如http://admin:admin@localhost:8761/eureka/

如果客户端无法连上eureka,可能时需要关闭csrd校验问题

服务续约保活

客户端和eureka进行心跳来检查客户端的存活情况;

有关续约保活的配置
客户端配置

# 服务续约,心跳的时间间隔
eureka.instance.lease-renewal-interval-in-seconds=30
# 如果从前一次发送心跳时间起, 90 秒没接受到新的心跳,将剔除服务
eureka.instance.lease-expiration-duration-in-seconds=90
# 表示 eureka client 间隔多久去拉取服务注册信息,默认为 30 秒
eureka.client.registry-fetch-interval-seconds=30

服务端配置

# 自我保护模式,当出现出现网络分区、 eureka 在短时间内丢失过多客户端时,会进入自我保护模式,即一个服务长时间没有发送心跳, eureka 也不会将其删除,默认为 true
eureka.server.enable-self-preservation=true
# Eureka Server 在运行期间会去统计心跳失败比例在 15 分钟之内是否低于 85% ,如果低于 85% , Eureka Server 会将这些实例保护起来
eureka.server.renewal-percent-threshold=0.85
# eureka server 清理无效节点的时间间隔,默认 60000 毫秒,即 60 秒
eureka.server.eviction-interval-timer-in-ms=60000

如上,并不是一次心跳失败就会想客户端下线为down,而是持续一段时间失败,才会正式下线

Eureka 健康检测

Eureka 默认的健康检测只是你校验服务连接是否是 UP 还是 DOWN 的,然后客户端只会调用状态为 UP 状态的服务,但是有的情况下,虽然应用服务连接正常,但是有可能这个服务的某些接口不是正常的,可比如 Redis,mongodb 或者 DB 有问题导致接口调用失败,所以理论上服务虽然能够正常调用,但是它不是一个健康的服务。所以我们就有必要对这种情况做自定义健康检测。

客户端通过下面配置开启

eureka.client.healthcheck.enabled=true

并通过实现HealthIndicator接口,比如如下示例,maven依赖spring-boot-starter-actuator

import com.xiangxue.jack.controller.UserController;
import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.boot.actuate.health.Status;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MicroWebHealthIndicator implements HealthIndicator {
    @Override
    public Health health() {
        //这个状态就是数据库是否连接OK
        if(DbUtils.isOk()) {
            return new Health.Builder(Status.UP).build();
        } else {
            return new Health.Builder(Status.DOWN).build();
        }
    }
}

这里的健康检查也是会根据前面续约保活的配置来延时跟新状态,

服务下线

eureka有提供手动下线的请求,使用delete的http请求

http://{hostname}:{port}/eureka/apps/{服务名称}/{服务实例名}

由于前面的保活续约机制,不能立即下线服务,可以通过上述方式调用来立即下线服务,但是客户端还是不一定会更新成最新的,前面有配置客户端拉取最新服务列表的参数

高可用eureka

高可用情况下会配置多个注册中心,多个eureka服务为复制集

配置时注意,服务端

#是否注册到eureka,相互注册
eureka.client.registerWithEureka=true
#是否从eureka中拉取注册信息,相互复制
eureka.client.fetchRegistry=true
##暴露eureka服务的地址 对方
eureka.client.serviceUrl.defaultZone=http://admin:admin@Eureka8762.com:8762/eureka/

客户端通过逗号分隔来配置多个

eureka.client.serviceUrl.defaultZone=http://admin:admin@localhost:8761/eureka/,http://admin:admin@localhost:8762/eureka/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值