Eureka原理和应用(结合Feign)

基本概念

Eureka

Eureka出现原因

如果后端之间想要调用服务,其中一种方式就是通过 HTTP 调用,而一般情况下,url 会以硬编码的方式出现在代码中的,但如果开发环境发生了变化,导致地址改变,或者对应的服务可能是以集群的方式出现,即 url 可能有多个,那么此时代码是无法满足需求的。因此出现了以下几个问题:

① 服务消费者该如何获取服务提供者的地址信息?
② 如果有多个服务提供者,消费者该如何选择?
③ 消费者如何得知服务提供者的健康状态?

因此,出现了注册中心这一中间件,其中就包括 Eureka

Eureka原理

在Eureka架构中,微服务角色有两类:

1.EurekaServer:服务端,注册中心。可以记录服务信息以及实现心跳监控

2.EurekaClient:客户端。其中又分为以下两类:

(1)Provider:服务提供者。每一个服务提供者会注册自己的信息到 EurekaServer,并且每隔 30s 向 EurekaServer 发送心跳

(2)Consumer:服务消费者。每一个服务消费者会根据服务名称从 EurekaServer 拉取服务列表,并基于服务列表做负载均衡,选中一个微服务后发起远程调用

因此对于以上三个问题的回答:

1.服务消费者该如何获取服务提供者的地址信息:

服务提供者启动时向 Eureka 注册自己的信息,Eureka 保存这些信息,消费者根据服务名称向 Eureka 拉取提供者信息

2.如果有多个服务提供者,消费者该如何选择:

服务消费者利用负载均衡算法,从服务列表中挑选一个

3.消费者如何感知服务提供者健康状态:

服务提供者会每隔 30s 向 EurekaServer 发送心跳请求,报告健康状态,Eureka 会更新记录服务列表信息,心跳不正常会被剔除。这样消费者就可以拉取到最新的信息

Feign

介绍

在传统的调用 http 方法中,我们即使使用了注册中心,也需要手动编写 URL、请求参数、请求头等代码,例如:

String url = "http://userservice/user/" + order.getUserId();

存在下面的问题:

① 代码可读性差,编程体验不统一
② 参数复杂,URL 难以维护

Feign 是一个声明式(类似于Spring的声明式事务,只需要在配置文件中告诉Spring对谁加事务,把规则定义好,就可以让Spring完成事务的开启与关闭等操作,而不用去手动处理)的 http 客户端,官方地址:https://github.com/OpenFeign/feign,其作用就是帮助我们优雅的实现 http 请求的发送,解决上面提到的问题

一般我们会使用 Feign 来配合注册中心的使用,以更方便地进行服务发现、负载均衡和熔断处理等

使用案例

1.引入依赖(注意,需要先指定 Spring Cloud 版本)
SpringCloud 的版本需要与 SpringBoot 版本对应,可以查看官网https://spring.io/projects/spring-cloud

image-20240720085123837

<dependencyManagement>
        <!--指定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>
    </dependencies>
</dependencyManagement>
<dependencies>   
    <!--Feign客户端依赖-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
</dependencies>

2.在启动类中添加注解 EnableFeignClients,开启 Feign 的功能

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

3.编写 Feign 的客户端

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值