学习内容安排如下:
- SpringCloud的接触,又是Spring……
- 利用SpringCloud搭建微服务架构,当然这个估计要3天时间才能完成,今天主要是注册中心Eureka的学习。
一、SpringCloud
微服务是一种系统架构方式,最终肯定是需要技术架构去完成实现的。
我们使用的就是SpringCloud,不用多说,看名称都知道又是Spring旗下的一个项目。
所以对于Java开发来说,Spring真是个绕不开的坎,哪里都有它。
其主要涉及的组件包括:
- Eureka:注册中心
- Zuul:服务网关
- Ribbon:负载均衡
- Feign:服务调用
- Hystix:熔断器
这几天依次学习这些知识点。
二、Eureka:注册中心
顾名思义,注册中心的作用在于服务的管理,记录服务提供的各种信息。
1Eureka服务端
所有的服务都要在Eureka服务端上注册。
所以我们需要先创建一个服务端,那如何让一个SpringBoot应用成为Eureka服务端呢?
①引入eureka服务端依赖
这个依赖非常长,记2个核心点:
- starter启动器的意思。
- erueka-server对应erueka的服务端,有服务端肯定也会有客户端。
②启动类开启eureka服务
@EnableEurekaServer,看这个注解的意思就能知道是开启eureka服务。
该SpringBoot应用被作为euerka服务端了,也就是前面说的注册中心。
③配置注册中心地址
这里就是指它自己,这是什么意思呢?
eureka服务端是专门用来管理服务的,所有的服务都要在它这个注册,而它本身也是一个服务,所以就需要自己注册自己。
当然我们也可以通过设置让它自己不注册自己,这边就不展开说了。
④给服务命名
application翻译是应用,在这里也就是一个服务,给它命名为eureka-server。
2Eureka客户端:服务的注册
比如user-service这个服务是用来查询和用户相关数据的,将该服务在注册中心注册。
注册成功后,其它服务就可以直接调用它了。
①引入eureka客户端依赖
一样的,2个核心点:
- starter启动器的意思。
- erueka-client对应erueka的客户端。
②启动类开启eureka客户端
@EnableEurekaClient,同理确实也是有这个注解的,开启eureka客户端。
不过这里使用@EnableDiscoveryClient,功能更加地强大,包含开启eureka客户端。
3Eureka客户端:服务的发现
服务注册了,那另外的服务消费方要直接使用它,就称之为服务的发现。
既然是服务,肯定也需要先完成注册,一样的步骤:导入依赖,启动类上添加客户端注解。
上述步骤不再赘述,直接调用服务。
- DiscoverClient:也就是启动类上注解配置的客户端。
- RestTemplate:这个昨天详细学习过,通过它可是实现服务间的调用。
①拉取服务
通过discoverClient的getInstances()方法可以拉取指定的服务。
②负载均衡
利用负载均衡获取其中的一个服务,因为我们这里总共就只有一个服务,所以不需要。
关于负载均衡的使用,结尾有详细讲述。
③字符串占位符
通过restTemplate的getForObject()方法可以向指定的url发起get请求。
通过String的format()方法实现拼接,将后面的ip,端口和id拼接到%s这个占位符中。
4服务的调用测试
配置完成,通过consumer-demo服务,就可以直接调用user-service服务了。
根据id去数据库查询对应的用户,我们只在user-service服务中实现了service层和dao层的代码编写。
如果在consumer-demo服务中要用,直接调用user-service服务即可。
三、Eureka详解
Eureka架构中的三个核心角色:
①服务注册中心
Eureka的服务端应用,提供服务注册和发现功能,也就是上述的eureka-server。
②服务提供者
提供服务的应用,可以是SpringBoot应用,也可以是其它任意技术实现,只要对外提供的是Rest风格服务即可,上述为user-service。
③服务消费者
消费者从注册中心获取服务列表,从而得知每个服务方的信息,知道去哪里调用服务方,也就是我们实现的consumer-demo。
2服务续约
lease-renewal-interval-in-seconds
服务续约的间隔,默认为30秒,renewal本身就是续约的意思。
lease-expiration-duration-in-seconds
服务失效时间,默认值90秒,expiration本身就是终结的意思。
也就是说,默认情况下每个30秒服务会向注册中心发送一次心跳,证明自己还活着。
如果超过90秒没有发送心跳,注册中心会认为该服务GG了,会将其移除。
这两个值在生产环境不要修改,默认即可。
3负载均衡Ribbon
刚才我们启动了一个user-service,通过DiscoveryClient来获取服务实例信息来访问,但是实际环境中,往往会开启多个。
此时我们获取的服务列表中就会有多个服务,到底该访问哪一个呢?
Eureka中已经帮我们集成了负载均衡组件:Ribbon,简单修改代码即可使用。
①开启负载均衡
通过@LoadBanlanced注解即可开启。
开启负载均衡之后,就可以在服务间调用的代码中直接使用了。
②url编写
url中的ip和端口直接使用服务的名称即可。
这个简单的理解就是:服务消费方要调用服务提供方,但是服务提供方开启了很多个。
负载均衡,就是指这次调用可能调用的是服务提供方①,另一次调用的就是服务提供方②。
这样多个服务提供方的服务就会轮番地被调用,但是它本质上又是一个服务,哎哟,这个我讲不太清楚。
最后
谢谢你的观看。
如果可以的话,麻烦帮忙点个赞,谢谢你。