spring微服务之Eureka的介绍与使用

目录

Eureka作用:

Eureka定义

功能介绍:

工作流程:

详细介绍:

常用编码:

     1. propertie配置

   2. 常用注解:

   3. 如何调用服务:

高可用配置方案:

RestTemplate介绍及使用:

Nacos与Eureka


Eureka作用:

        服务注册、服务发现、心跳和续约、服务下线、剔除和自保

Eureka定义

        Eureka作为Spring Cloud框架的注册中心,与之对应的是Dubbo框架的Zookeeper。

.
Eureka的作用
        Eureka的主要作用:就是解决服务注册,以及服务发现这两大核心功能。
        首先服务注册:就是服务提供者(Provider)向注册中心注册自己的地址。
        其次服务发现:就是消费者(Consumer)从注册中心发现其他服务。
        所有的服务都可以注册到Eureka上面,只需要提供服务名称,服务消费者可以从Eureka.上获取到服务提供者的真实地址然后进行调用。

功能介绍:

1.注册实例
        当服务提供者启动时,会向注册中心发送请求,在注册中心注册实例。
2拉取服务
        消费者会把注册中心的整个注册表都全部拉取过来缓存到本地,当需要调用某一个服务时,根据缓存的注册信息直接调用服务。
3.定期更新
        消费者每隔一段时间向注册中心发送心跳,注册中心会保存实例和地址的映射关系。Eureka消费者会每隔30秒拉取一次注册表,更新注册信息,将获取到的信息缓存到本地。
4.自我保护
        特殊情况,由于网络不稳定15秒内85%服务器出现心跳异常,一次收不到就算心跳一次。

工作流程:

 

详细介绍:

1、Eureka Server启动成功,等待服务端注册,在启动过程中如果配置了集群,集群之间定时通过Replicate同步注册表,
2、Eureka Client启动时根据配置的Eureka Server地址去注册中心注册服务;
3、Eureka Client会每30s向Eureka Server发送一次心跳请求,证明客户端服务正常;
4、当Eureka Server90s内没有收到Eureka Client的心跳,注册中心则认为该节点失效,会注销该实例;
5、单位时间内Eureka Server统计到有大量的Eureka Client没有上送心跳(15秒内85%服务器出现心跳异常),则认为可能为网络异常,进入自我保护机制;
6、当Eureka Client心跳请求恢复正常之后,Eureka Server自动退出自我保护模式;
7、Eureka Client定时全量或者增量从注册中心获取服务注册表,并且将获取到的信息缓存到本地;
8、服务调用时,Eureka Client会先从本地缓存找寻调取的服务,如果获取不到,先从注册中心刷新注册表,再同步到本地缓存;
9、Eureka Client获取到目标服务器信息,发起服务调用;
10、Eureka Client程序关闭时向Eureka Server发送取消请求,Eureka Server将实例从注册表中删除。
 

常用编码:
     1. propertie配置
#################################################
                 注册中心配置

#################################################

#spring cloud服务名称,会通过大写的方式在注册中心显示
spring.application.name=eureka-client

#服务的端口号
server.port=30002

#是否向注册中心注册
eureka.client.register-with-eureka=false
#是否自动拉取注册中心服务列表
eureka.client.fetch-registry=false

#注册中心实例名称
eureka.instance.hostname=peer

# 强制关闭服务自保(自动开关不起作用)
#eureka.server.enable-self-preservation=false

# 每隔多久触发一次服务剔除
#eureka.server.eviction-interval-timer-in-ms=10000


# 每隔5秒钟,向服务中心发送一条续约指令
#eureka.instance.lease-renewal-interval-in-seconds=5

# 如果30秒内,依然没有收到续约请求,判定服务过期(上西天)
#eureka.instance.lease-expiration-duration-in-seconds=30

#################################################
                 服务提供方配置

#################################################


#单机情况下注册中心地址
eureka.client.serviceUrl.defaultZone=http://localhost:20000/eureka/
#集群情况下注册中心地址
eureka.client.serviceUrl.defaultZone=http://peer2:20000/eureka/,http://peer1:20001/eureka


   2. 常用注解:

   @EnableDiscoveryClient:服务提供者的启动类上需要添加;

   @EnableEurekaServer:注册中心的启动类需要添加;

   3. 如何调用服务:
    @Autowired
    private LoadBalancerClient client;

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/hello")
    public String hello() {
        ServiceInstance instance = client.choose("eureka-client");

        if (instance == null) {
            return "No available instances";
        }

        String target = String.format("http://%s:%s/sayHi",
                instance.getHost(),
                instance.getPort());
        log.info("url is {}", target);

        return restTemplate.getForObject(target, String.class);
    }

LoadBalancerClient: Ribbon中的负载均衡器,来分配服务;

RestTemplate:发送rest请求,因为Eureka服务调用是基于http请求的;

高可用配置方案:

        需要互相注册,会显示为一个为另外一个的副本:

##########################################
                    peer2

##########################################

spring.application.name=eureka-server-peer2

server.port=20002

eureka.instance.hostname=peer2

eureka.client.service-url.defaultZone=http://peer1:20001/eureka

##########################################
                    peer1

##########################################

spring.application.name=eureka-server-peer1

server.port=20001

eureka.instance.hostname=peer1

eureka.client.service-url.defaultZone=http://peer2:20002/eureka

RestTemplate介绍及使用:

      RestTemplate 是从 Spring3.0 开始支持的一个 HTTP 请求工具,它提供了常见的REST请求方案的模版,例如 GET 请求、POST 请求、PUT 请求、DELETE 请求以及一些通用的请求执行方法 exchange 以及 execute。RestTemplate 继承自 InterceptingHttpAccessor 并且实现了 RestOperations 接口,其中 RestOperations 接口定义了基本的 RESTful 操作,这些操作在 RestTemplate 中都得到了实现。

     1.get方法:

RestTemplate restTemplate2 = new RestTemplate();
String url = "http://127.0.0.1:8081/interact/getData?dt={dt}&ht={ht}";
       
// 封装参数,这里是HashMap
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("dt", "20190225");
paramMap.put("ht", "10");
 
//使用getForObject请求接口
String result1 = template.getForObject(url, String.class, paramMap);
System.out.println("result1====================" + result1);

    2.post方法:

        //JSONObject userInfo = new JSONObject();
        Map<String, Object> userInfo = Maps.newHashMap();
        userInfo.put("phone", accountForm.getPhone());
        userInfo.put("job", accountForm.getJob());
        userInfo.put("email", accountForm.getEmail());
 
        Map<String, Object> postBody = Maps.newHashMap();
        postBody.put("userInfo", userInfo);
 
        HttpEntity<Map> requestEntity = new HttpEntity<>(postBody, headers);
 
         try {
             ResponseEntity<String> result = restTemplate.postForEntity(config.getCreateWithAuthUrl(), requestEntity, String.class);
             JsonNode jsonNode = JsonUtils.toJsonNode(result.getBody());
             if (jsonNode.get("errno").asInt() == 200 || jsonNode.get("errno").asInt() == 505) {
                 return true;
             }
 
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        }
Nacos与Eureka

Nacos与eureka的共同点

        都支持服务注册和服务拉取

        都支持服务提供者心跳方式做健康检测

Nacos与Eureka的区别

        Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式

        临时实例心跳不正常会被剔除,非临时实例则不会被剔除

        Nacos支持服务列表变更的消息推送模式,服务列表更新更及时

        Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式 

部分转载自:

        1.  Eureka详解(架构原理及功能流程) – mikechen

        2. RestTemplate使用详解_WPZ_Sophia的博客-CSDN博客

        3. 2022-2-13 Nacos与Eureka的区别 - 哔哩哔哩

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值