栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringCloud-Eureka的微服务信息参数和Discovery以及Eureka的自我保护(Day3)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringCloud-Eureka的微服务信息参数和Discovery以及Eureka的自我保护(Day3)

Eureka的微服务信息参数,注意新版的已经显示默认是(IP:服务名:端口) cloud-provider-payment8001
eureka:
  ...
  instance:
    instance-id: payment8001 # 微服务名称
cloud-provider-payment8002
eureka:
  ...
  instance:
    instance-id: payment8002 # 微服务名称
效果

服务发现Discovery 修改消费模块的控制层代码如下
package com.gcl.springcloud.controller;

import com.gcl.springcloud.entities.CommonResult;
import com.gcl.springcloud.entities.Payment;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
import java.util.List;

@RestController
@Slf4j
public class OrderController {

    private static final String PAYMENT_URL = "http://cloud-payment-service";

    @Resource
    private RestTemplate restTemplate;

    @Resource
    private DiscoveryClient discoveryClient;

    @GetMapping(value = "/consumer/payment/create")
    public CommonResult create(Payment payment){
        return restTemplate.postForObject( PAYMENT_URL + "/payment/create" , payment , CommonResult.class);
    }

    @GetMapping(value = "/consumer/payment/get/{id}")
    public CommonResult getPayment(@PathVariable("id") Long id ){
        return restTemplate.getForObject( PAYMENT_URL + "/payment/get/" + id , CommonResult.class);
    }

    @GetMapping(value = "/payment/discovery")
    public Object discovery()
    {
        List services = discoveryClient.getServices();
        for (String element : services) {
            log.info("*****element: "+element);
        }

        List instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
        for (ServiceInstance instance : instances) {
            log.info(instance.getServiceId()+"t"+instance.getHost()+"t"+instance.getPort()+"t"+instance.getUri());
        }
        return this.discoveryClient;
    }
    
}
运行


Eureka自我保护理论 说明

保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据,也就是不会注销任何微服务。

进入保护模式的标志

EureKa的自我保护模式机制

如果Eureka在server端在一定时间内(默认90秒)没有收到EurekaClient发送心跳包,便会直接从服务注册列表中剔除该服务,但是在短时间( 90秒中)内丢失了大量的服务实例心跳,这时候Eurekaserver会开启自我保护机制,不会剔除该服务(该现象可能出现在如果网络不通但是EurekaClient为出现宕机,此时如果换做别的注册中心如果一定时间内没有收到心跳会将剔除该服务,这样就出现了严重失误,因为客户端还能正常发送心跳,只是网络延迟问题,而保护机制是为了解决此问题而产生的)。

Eureka的自我保护模式是属于CAP中的AP。 如何禁止Eureka的自我保护机制 Server端
eureka:
  ...
  server:
    #关闭自我保护机制,保证不可用服务被及时踢除
    enable-self-preservation: false
    #新跳逾期时间,单位ms,超过这个时间就直接删掉
    eviction-interval-timer-in-ms: 2000
Client端
eureka:
  ...
  instance:
    #心跳检测与续约时间
    #Eureka客户端向服务端发送心跳的时间间隔,单位为秒(默认是30秒)
    lease-renewal-interval-in-seconds: 1
    #Eureka服务端在收到最后一次心跳后等待时间上限,单位为秒(默认是90秒),超时将剔除服务
    lease-expiration-duration-in-seconds: 2
运行截图

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/643531.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号