文章目录
1. 前言
SpringCloud是分布式微服务架构的一站式解决方案,是一个全家桶式的技术栈,包含了很多组件。接下来咱们就开始学习其最核心的几个组件入手,也就是Eureka、Ribbon、Feign、Hystrix、Zuul这几个组件,并且会剖析一下每个组件其底层的工作原理。
在学习Eureka之前,咱们先来思考一个业务场景,假设咱们现在开发一个电商网站,要实现支付订单的功能,流程如下:
(1)创建一个订单后,如果用户立刻支付了这个订单,我们需要将订单状态 更新为“已支付” (2) 扣减相应的商品库存 (3) 通知仓储中心,进行发货 (4) 给用户的这次购物增加相应的积分
针对上述流程,我们需要有订单服务、库存服务、仓储服务、积分服务。整个流程的大体思路如下:
(1) 用户针对一个订单完成支付之后,就会去找订单服务,更新订单状态
(2) 订单服务调用库存服务,完成相应功能
(3) 订单服务调用仓储服务,完成相应功能
(4) 订单服务调用积分服务,完成相应功能
至此,整个支付订单的业务流程结束:
咱们来考虑第一个问题:订单服务想要调用库存服务、仓储服务,或者是积分服务,怎么调用?
**订单服务压根儿就不知道人家库存服务在哪台机器上啊!他就算想要发起一个请求,都不知道发送给谁,有心无力!**这时候,就轮到Spring Cloud Eureka出场了。Eureka是微服务架构中的注册中心,专门负责服务的注册与发现。
如上图所示,库存服务、仓储服务、积分服务中都有一个Eureka Client组件,这个组件专门负责将这个服务的信息注册到Eureka Server中。说白了,就是告诉Eureka Server,自己在哪台机器上,监听着哪个端口。而Eureka Server是一个注册中心,里面有一个注册表,保存了各服务所在的机器和端口号。
订单服务里也有一个Eureka Client组件,这个Eureka Client组件会找Eureka Server问一下:库存服务在哪台机器啊?监听着哪个端口啊?仓储服务呢?积分服务呢?然后就可以把这些相关信息从Eureka Server的注册表中拉取到自己本地缓存起来。
这时如果订单服务想要调用库存服务,不就可以找自己本地的Eureka Client问一下库存服务在哪台机器?监听哪个端口吗?收到响应后,紧接着就可以发送一个请求过去,调用库存服务扣减库存的那个接口!同理,如果订单服务要调用仓储服务、积分服务,也是如法炮制。
Eureka Client:负责将这个服务的信息注册到Eureka Server中或者是从Eureka Server中读取服务的注册表信息。 Eureka Server:注册中心,里面有一个注册表,保存了各个服务所在的机器和端口号
2. Eureka是什么
Eureka(优瑞卡)
Eureka在微服务架构中充当着注册中心的角色,用于实现服务的注册和发现。
举一个生活中的例子,就比如我们平时租房子找中介的事情。 在没有中介的时候我们需要一个一个去寻找是否有房屋要出租的房东,这显然会非常的费力,仅凭你一个人的能力是找不到很多房源供你选择,再者你也懒得这么找下去(找了这么久,没有合适的只能将就)。这里的我们就相当于微服务中的Consumer(消费者) ,而那些房东就相当于微服务中的Provider(提供者) 。消费者Consumer需要调用提供者 Provider提供的一些服务,就像我们现在需要租他们的房子一样。 但是如果只是租客和房东之间进行寻找的话,他们的效率是很低的,房东找不到租客赚不到钱,租客找不到房东住不了房。所以,后来房东肯定就想到了广播自己的房源信息(比如在街边贴贴小广告),这样对于房东来说已经完成他的任务(将房源公布出去),但是有两个问题就出现了。第一、其他不是租客的都能收到这种租房消息,这在现实世界没什么,但是在计算机的世界中就会出现资源消耗的问题了。第二、租客这样还是很难找到你,试想一下我需要租房,我还需要东一个西一个地去找街边小广告,麻不麻烦? 那怎么办呢?我们当然不会那么傻乎乎的,第一时间就是去找 中介 呀,它为我们提供了统一房源的地方,我们消费者只需要跑到它那里去找就行了。而对于房东来说,他们也只需要把房源在中介那里发布就行了。
但是,这个时候还会出现一些问题。 **房东注册之后如果不想卖房子了怎么办?**我们是不是需要让房东定期续约 ?如果房东不进行续约是不是要将他们从中介那里的注册列表中移除 。 租客是不是也要进行注册呢?不然合同乙方怎么来呢? 中介可不可以做连锁店呢?如果这一个店因为某些不可抗力因素而无法使用,那么我们是否可以换一个连锁店呢?
好了,举完这个例子我们就可以来看关于 Eureka 的一些基础概念了,你会发现这东西理解起来怎么这么简单。
3. Eureka两大组件
3.1Eureka服务端(房屋中介)
Eureka Server提供服务注册功能,各个节点启动后,会在Eureka Server中进行注册,这样Eureka Server中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。Eureka Server提供了一个图像化界面,访问这个页面就可以看到所有注册的服务的信息。
3.2Eureka客户端(租房的人和房东)
Eureka Client是一个Java客户端,用于简化Eureka Server的交互,客户端同时也具备一个内置的、使用轮询(round-robin)负载算法的负载均衡器(Ribbon)。在应用启动后,将会向Eureka Server发送心跳(默认周期为30秒)。如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)
3.3思考
Eureka服务端是不是就是相当于中介呀,Eureka客户端是不是就是我们和房东呀,我们是不是通过中介找到的房东啊?
4. Eureka基本架构(三个角色)
Consumer:消费者 Provider:提供者
Consumer:消费者 Provider:提供者
4.1Eureka Server
提供服务注册和发现。同时,Eureka Server也为我们提供了可视化的监控页面,可以直观地看到各个Eureka Server当前的运行状态和所有已注册服务的情况。再说白点Eureka Server其实就是服务提供者和服务消费者之间的“桥梁”,服务提供者可以把自己注册到服务中介那里,而服务消费者如需要消费一些服务(使用一些功能)就可以在服务中介中寻找注册在服务中介的服务提供者。
4.2 Service Provider
服务提供者。将自身服务注册到Eureka Server,从而使服务消费者能够找到。
4.3Service Consumer
服务消费者。从Eureka Server获取注册服务列表,从而能够消费服务。
5. 学习Spring Cloud组件的秘诀
(1) 在pom.xml中添加该组件对应的依赖
(2) 修改配置文件,做一些和该组件相对应的配置
(3) 修改启动类,在启动类上加组件相对应的注解:@EnableXXXX
6. IDEA批量启动多个Spring Boot应用
https://www.jianshu.com/p/1f840b7f7de4
7. Eureka实战
7.1 搭建Eureka Server注册中心
l 新建一个Maven父工程并添加SpringCloud和SpringBoot的依赖
<properties>
<spring.cloud-version>Hoxton.SR12</spring.cloud-version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${
spring.cloud-version}

本文探讨了SpringCloud Eureka在微服务架构中的角色,如中介EurekaServer如何连接服务提供者和服务消费者,以及自我保护机制、集群部署等关键概念。通过租房买房场景详解,揭示Eureka的工作原理和实战应用。
最低0.47元/天 解锁文章
1613

被折叠的 条评论
为什么被折叠?



