SpringCloud------Eureka修改实例显示信息、服务发现Discovery、自我保护(六)

SpringCloud------Eureka修改实例显示信息、服务发现Discovery、自我保护(六)

1.actuator微服务信息完善
2.服务发现Discovery
3.Eureka自我保护

actuator微服务信息完善

web和actuator依赖用于图形化监控

1.主机名称:服务名称修改

新增:instance-id

eureka:
  client:
    register-with-eureka: true # 表示是否将自己注册进EurekaServer默认为true
    # 是否从EurekaServer抓取已有的注册信息,默认为true,单节点无所谓,集群必须为true,才能配合ribbon使用负载均衡
    fetch-registry: true
    service-url:
      #defaultZone: http://localhost:7001/eureka
      #defaultZone: http://eureka7001.com/7001/eureka,http://eureka7002.com/7002/eureka
      defaultZone: http://localhost:7001/eureka,http://localhost:7002/eureka
  instance:
    instance-id: payment8001 #8002的改为payment8002

修改完重启后:
在这里插入图片描述
在这里插入图片描述

健康检查

点击对应的服务名
会进入对应的地址:

http://01za3zd23001166.corp.haier.com:8001/actuator/info

改为health:

http://01za3zd23001166.corp.haier.com:8001/actuator/health

会打印出:
{“status”:“UP”}

2.访问信息有IP信息提示

  instance:
    instance-id: payment8001
    prefer-ip-address: true  # 访问路径可以显示IP地址

如图所示
在这里插入图片描述

服务发现Discovery

对于注册进eureka里面的微服务,可以通过服务发现来获得该服务的信息。
对于服务提供者Controller进行改造
新增如下代码:

import org.springframework.cloud.client.discovery.DiscoveryClient;

    @Resource
    private DiscoveryClient discoveryClient;

    @GetMapping("/discovery")
    public Object discovery(){
        /**
         * 获取服务清单列表
         */
        List<String> services = discoveryClient.getServices();
        for (String element:services){
            log.info("***element:*"+element);
        }
        /**
         * 服务名,获取这个服务下多个实例
         */
        List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
        for (ServiceInstance instance:instances){
        // 实例id/实例IP/实例端口/实例的url
            log.info(instance.getInstanceId() +"。"+instance.getHost()+"。"+instance.getPort()+"。"+instance.getUri());
        }
        return this.discoveryClient;
    }

接下来在对生产者的启动类新增 @EnableDiscoveryClient注解

@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
public class PaymentMain8001 {
    public static void main(String[] args) {
        SpringApplication.run(PaymentMain8001.class,args);
    }
}

调用该接口测试效果如图:
在这里插入图片描述
返回结果:

{
“services”: [
“cloud-payment-service”,
“cloud-consumer-service”
],
“order”: 0
}

Eureka自我保护

保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。

一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据,也就是不会注销任何微服务。

如果Eureka Serve页面中看到如下信息,说明Eureka进入了保护模式:
在这里插入图片描述

意思是:

某一时刻某个微服务不可用了,Eureka不会立刻清理,依旧会对该微服务的信息进行保存。
属于CAP理论中的AP分支

设计原因:
为了防止Client可以正常运行,但是Eureka Server网络不通情况下,Eureka Server不会立刻将Client服务剔除。

默认时间是90s
简单地说就是防止因为网络原因,错误注销正常的服务。
宁可保护错误的服务注册信息,也不盲目注销任何可能健康的服务实例

如何禁止自我保护

修改注册端的配置

默认开启自我保护

eureka.server.enable-self-preservation: true 默认为true开启
eviction-interval-timer-in-ms: 2000 # 心跳时间改为2s,2000毫秒

改为false即可禁止自我保护。

eureka:
  client:
    register-with-eureka: true # 表示是否将自己注册进EurekaServer默认为true
    # 是否从EurekaServer抓取已有的注册信息,默认为true,单节点无所谓,集群必须为true,才能配合ribbon使用负载均衡
    fetch-registry: true
    service-url:
    #defaultZone: http://localhost:7001/eureka
      #defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
      defaultZone: http://localhost:7001/eureka
      # ,http://localhost:7002/eureka
  server:
    enable-self-preservation: false  # 禁用自我保护
    eviction-interval-timer-in-ms: 2000 # 心跳时间改为2s,2000毫秒
客户端同样可以修改发送心跳时间间隔

lease-renewal-interval-in-seconds: 10 #默认为30s,发送一次心跳, 修改客户端向服务器端发送心跳的时间间隔,单位为秒
lease-expiration-duration-in-seconds: 2 #eureka服务器端在收到最后一次心跳后等待时间的上线,单位为秒,默认为90s
# 超时将剔除服务

eureka:
  client:
    register-with-eureka: true # 表示是否将自己注册进EurekaServer默认为true
    # 是否从EurekaServer抓取已有的注册信息,默认为true,单节点无所谓,集群必须为true,才能配合ribbon使用负载均衡
    fetch-registry: true
    service-url:
      #defaultZone: http://localhost:7001/eureka
      #defaultZone: http://eureka7001.com/7001/eureka,http://eureka7002.com/7002/eureka
      defaultZone: http://localhost:7001/eureka
      # ,http://localhost:7002/eureka
  instance:
    instance-id: payment8001
    prefer-ip-address: true  # 访问路径可以显示IP地址
    lease-renewal-interval-in-seconds: 1  #默认为30s,发送一次心跳,   修改客户端向服务器端发送心跳的时间间隔,单位为秒
    lease-expiration-duration-in-seconds: 2 #eureka服务器端在收到最后一次心跳后等待时间的上限,单位为秒,默认为90s
    # 超时将剔除服务

以上是Eureka的全部内容。

Eureka停更后怎么办?

切换其他的注册中心,或者继续使用。
目前是停更不停用的阶段。

https://github.com/Netflix/eureka/wiki

2.0以后就不再更新
1.x依然是一个活动的工程

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值