详解Eureka服务注册和调用

目录

1.概述

2.环境

2.1.项目结构

2.2.项目架构

2.3.依赖

3.注册中心

3.1.配置使用

3.2.管理页

3.3.集群

4.服务注册

5.服务调用

5.2.Ribbon

5.3.Feign

5.4.OpenFeign


1.概述

我们把从外部进入到微服务集群里的流量称为“南北流量”、微服务集群节点间流转的流量称为“东西流量”。就“南北流量”而言微服务架构其实仍然是一个中心化的架构,这个中心是“目录”,因为需要一个“目录”来记录服务的相关信息(诸如部署在哪台服务器上),“南北流量”才能找得到服务。这个"目录"在微服务体系中被称为“注册中心”。注册中心是微服务体系中最重要的一个组件,在Netflix版本的spring cloud中,注册中心组件是——eureka。

服务提供者向注册中心(Eureka Server)中注册数据,消费者在注册中心(Eureka Server)中获取数据。系统中的微服务使用Eureka客户端链接到Eureka Server中,并且维持心跳(即固定时间向server发送信号,证明自己存活。)

3f010a2d57bc44c3929635624023fddf.png

以上整个流程中,有两个组件的参与:

  • 注册中心
  • 远程服务调用组件

在Netflix版的spring cloud中注册中心一直都是eureka,但是远程服务调用组件有好几个可选:

  • Ribbon
  • Feign
  • OpenFeign。

它们之间从上到下都是逐渐优化、取代的关系。

本文会首先讲使用eureka进行服务注册,然后顺序的讲以上几种远程服务调用组件的使用和其相较于前一个的优化点在哪里。

2.环境

2.1.项目结构

f77f7640556d4341a8bf7ff4a6d71a52.png

整个示例项目用标准的maven结构,分为三个子module:

  • eureka,注册中心
  • userService,服务提供者
  • consumer,服务调用者

整个项目的依赖的版本管理在最顶层的父级pom.xml中进行。

2.2.项目架构

整个示例项目之所以分为三部分是希望在服务调用者和服务之间使用通信组件来展示如何结合注册中心来进行服务间的通信:

57985a07acbd488c81204921c264f5e2.png

2.3.依赖

spring官网,进入spring cloud的项目,项目首页详细记录着Netflix版本的spring cloud和spring boot之间的版本对应关系:

327dc33e149b496dac0d19b5749d8fa4.png

本项目我们选取spring boot 2.6.Xspring cloud Netflix aka jubilee。

在最顶级的父pom中引入依赖:

 <properties>
        <spring-cloud.version>2021.0.7</spring-cloud.version>
        <spring-boot.version>2.6.10</spring-boot.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

3.注册中心

3.1.配置使用

依赖:

0f066b4c876c42cc86f33b98bdd9643f.png

配置:

a9ae69d42d474828bd096b37daed03dd.png

启动:

@SpringBootApplication
@EnableEurekaServer
public class EurekaMain {
    public static void main(String[] args) {
        SpringApplication.run(EurekaMain.class);
    }
}

3.2.管理页

通过IP+端口号的方式可以访问到eureka server的管理页:

整个管理页里面最重要的一部分是框起来的这部分,这部分显示的是注册在当前eureka server上的服务有哪些,目前还没有服务注册,所以没有显示任何东西。

0b584b7bd7dc4a628d6ea7730380b845.png

3.3.集群

eureka支持集群模式用于相互冗余容灾。eureka集群的配置很简单,没必要单独写了例子,以下是博主之前做的eureka的集群配置文件,看后会一目了然。

在每个eureka上关联其它eureka:

362efe9726a545588320a18d472450ba.png

 服务注册到所有eureka上:

32370aef2e5f469ebba21f6711dcdbf0.png

4.服务注册

注册中心已经准备好了,接下来我们要准备一个服务,将它注册到配置中心上。
依赖:

219da76711e8446185e49a32d368dfd5.png

配置:

0ecd5d6e60224e5b95b318561dbf453b.png

启动:

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

启动服务后,可以在eureka server上查看服务是否已经注册: 

6bb460a189634e888562a16acfda092f.png

5.服务调用

准备好注册中心、注册好服务后,接下来就是如何调用服务的问题了。也就是如何用以下几种组件来调用服务:

  • Ribbon
  • Feign
  • OpenFeign

5.2.Ribbon

ribbon只是一个负载均衡组件,需要依赖于其它HTTP通信组件来实现通信,一般用ribbon+spring boot自带的RestTemplate。

依赖:

eureka的以来里集成了ribbon,所以要使用ribbon来调服务的时候,直接引入eureka的依赖即可。

59975dff3e7e414098e545cd5d33a227.png

配置:

@LoadBalanced用来将RestTemplate托管给ribbon来管理。

2d3da4cd755f4dbc989e803402a1bb63.png

a3b3510bbc5d45df9acd2c4743fbaa03.png

服务调用:

ef71b7117e0249dda00285ed6dd08c52.png 结果:

f5cd5143680f43ec9216d7ee2f0e9e48.png

5.3.Feign

ribbon+restTemplate可以完成服务的调用以及负载均衡,但是存在一个很明显的地方就是服务名直接写死,不便于维护。srping体系中主体思想是依赖倒置,也就是面向接口编程,所以社区推出了Feign,其封装了ribbon和http请求工具,使得其除了能完成负载均衡和http请求以外,可以面向接口编程来完成服务调用。

依赖:

78a7b4f555464513b483707bca7b10d7.png

服务层:

7752a45e57484571a6178a5e3128924e.png 服务调用:

a794982e4c4e41669e065a9f6529873b.png 开启Feign:

e497bf6d566748a1901bbd155344a089.png

结果:

f5326f1139a6460ba07ef9b0ac4fb5cd.png

5.4.OpenFeign

feign面向接口的、声明式的服务调用组件,其封装了ribbon,目的是简化服务调用代码,使得服务调用具有rest风格。Openfeigin是feigin的升级版,增强了对springMVC注解的支持。

以上是博主写过的一个OpenFeign的示例。

依赖:

5bf7e8479d7b4da18a9f1220d13e9f56.png

 启动:

7a532e9362704fcd8c02bf8ced57b82d.png

服务层:

96dc16d710be49c79ee0f9f50edf9829.png

服务调用:

84655da40d274dc9a5bffa1f765e1640.png

  • 27
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 41
    评论
SpringCloud微服务课程说明 1 网站架构演变过程 1 传统架构 1 分布式架构 1 SOA架构 1 微服务架构 2 微服务架构产生的原因 2 漫谈微服务架构 2 什么是微服务 2 微服务架构特征 3 微服务架构如何拆分 3 微服务架构与SOA架构区别 3 SpringCloud微服务框架 3 为什么选择SpringCloud 4 SpringCloud简介 4 服务治理SpringCloud Eureka 5 什么是服务治理 5 服务注册与发现 5 搭建注册中心 6 常用注册中心框架 6 注册中心环境搭建 6 注册服务提供者 8 服务消费者 11 高可用注册中心 14 Eureka高可用原理 14 Eureka集群环境搭建 14 Eureka详解 17 使用Eureka闭源了闭源了怎么办? 21 使用Consul来替换Eureka 21 使用Zookeeper来替换Eureka 25 Consistency(一致性), 数据一致更新,所有数据变动都是同步的 Availability(可用性), 好的响应性能 Partition tolerance(分区容忍性) 可靠性 28 客户端负载均衡器 29 客户端负载均衡器 29 Ribbon与Nginx区别 29 RestTemplate 31 请求类型 31 负载均衡器源码分析 33 负载均衡器重试机制 33 服务保护机制SpringCloud Hystrix 33 微服务高可用技术 33 服务降级、熔断、限流概念 34 服务学崩效应 34 服务降级 34 服务熔断 35 服务隔离 35 服务限流 36 Hystrix简单介绍 36 Hystrix环境搭建 37 Maven依赖信息 37 开启Hystrix断路器 37 服务降级处理 38 Hystrix仪表盘 39 Turbine集群监控 39 声明式服务调用SpringCloud Feign 39 feign介绍 39 环境搭建 40 Maven依赖信息 40 feign客户端接口 40 feign继承特性 41 创建springcloud-2.0-parent 42 Ribbon配置 45 配置Feign客户端超时时间 45 Api网关服务SrpingCloud Zuul 45 网关分类 46 网关设计 46 网关框架 48 网关作用 49 网关与过滤器区别 49 Nginx与Zuul的区别 49 Zuul网关 49 动态网关 53 网关集群 55 分布式配置中心SrpingCloud config 57 SpringCloud分布式配置中心 57 Config架构 58 Git环境搭建 58 服务详解 58 Maven依赖信息 58 application.yml配置 59 项目启动 60 客户端详解 60 Maven依赖信息 60 bootstrap.yml 61 读取配置文件 62 动态刷新数据 62 actuator端点刷新数据 63 Maven依赖信息 63 Bootstrap.xml新增 63 include: "*" 63 生效前提 63 private String itmayieduInfo; 63 当配置更改时,标有@RefreshScope的Bean将得到特殊处理来生效配置 64 手动刷新接口 64 分布式服务跟踪SpringCloud sleuth 64 什么是Sleuth 64 环境搭建 64 构建server-zipkin 64 会员服务 65 订单服务 65 Swagger2API接口管理 65 课题引入 65 传统的API文档编写存在以下几个痛点: 66 Swagger具有以下优点 66 Swagg er 2.0 集成配置 66 Maven依赖信息 66 SwaggerConfig 68 Zull整合Swagger管理微服务所有API 68 会员和订单引入Maven依赖 68 ZuulGateway网关 69

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_BugMan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值