Eureka原理和应用(结合Feign)

文章目录

  • 基本概念
    • Eureka
      • Eureka出现原因
      • Eureka原理
    • Feign
      • 介绍
      • 使用案例
      • 自定义配置
      • 性能优化
      • 最佳实践
  • 代码案例
    • EurekaServer
    • Provider
    • Consumer
    • 测试

基本概念

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

Eureka原理和应用(结合Feign)_第1张图片

<dependencyManagement>
        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-dependenciesartifactId>
            <version>${spring.cloud.version}version>
            <type>pomtype>
            <scope>importscope>
        dependency>
    dependencies>
dependencyManagement>
<dependencies>   
    
    <dependency>
        <groupId>org.springframework.cloudgroupId>
        <artifactId>spring-cloud-starter-openfeignartifactId>
    dependency>
dependencies>

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

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

你可能感兴趣的:(分布式,eureka,feign,分布式,注册中心,后端)