博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Cloud注册中心引申及介绍
阅读量:4171 次
发布时间:2019-05-26

本文共 2073 字,大约阅读时间需要 6 分钟。

实际场景

比如用户系统中存在一个接口,底层实际调用的是订单服务的一个远程接口。

在这里插入图片描述

一、原生调用

默认情况下,若是不引用任何其他技术,原生去调用,那么就会直接使用HTTP的restTemplate

什么是RestTemplate?

传统情况下在java代码里访问restful服务,一般使用Apache的HttpClient。不过此种方法使用起来太过繁琐。spring提供了一种简单便捷的模板类来进行操作,这就是RestTemplate。
详细可点击:
进行阅读

比如代码如下:

在这里插入图片描述

存在的问题

这种是可以调通的,但是呢,存在以下问题

若订单系统服务器设置了多台,那么需要如何调用做到负载均衡呢?
在这里插入图片描述

图上,订单系统有多个实例,这里需要如何调用呢?

如果还是这样写:
在这里插入图片描述
永远只会调到一个机器实例。

那怎么改造可以使得调用不同的服务器呢?,引申出Nginx配置

二、Nginx配置调用

在早些年,微服务架构还流行的时候,一些大型的电商网站对后台服务已经进行了拆分,没有好的微服务架构的支撑,当时就是在服务中间添加了Nginx。

若某个子系统有多个服务器实例,则在Nginx中配置一个大的域名(比如多个订单系统的服务器域名为orde.com),对于这些域名在Nginx中进行负载均衡的转发配置(把订单微服务所有的服务器IP都映射到这个域名下面)。

那么在用户子系统中只需调用对应的域名,就会由Nginx将请求转发到每一台机器。

配置Nginx实际调用如下:

在这里插入图片描述

存在的问题

用Nginx配置解决也存在问题,比如

1)没有错误检测
2)稳定性下降
3)配置繁琐
比如大的电商系统,到了大促的时候(每年双11),需要加很多机器,而且是几倍几倍增加。后端有几十甚至上百个微服务,每个微服务有一二十台机器,那么就意味着需要修改很多个Nginx的配置,而且大促一旦结束之后,马上就需要把多加的机器下线关掉,就有需要修改Nginx的配置,然后重启,是非常麻烦的,运维工作量太大了。

三、Spring Cloud

到这里需要解决的最大的问题,就是负载均衡的问题,包括加服务器或者减服务器Nginx都要改配置重启,非常麻烦。

所以现在几乎没有公司在用Nginx来做后端子系统之间的交互

在没有流行微服务架构的时候,没有办法才使用了Nginx,现在一般来说都不会再用,而是选择微服务架构(比如Spring Cloud)

在微服务架构中,引入了服务注册中心,主要是用来存储各个服务器的信息。

所有服务在启动的时候,会调用服务注册中心的接口,将本身的IP信息写入,在其他微服务需要调用的时候,则会先从注册中心将对应的服务IP列表拿到本地,然后再逐台自己实现负载均衡的逻辑,逐台调用

那么存在以下疑问:

要是再加服务器的话怎么办?
回答:加完服务器之后,肯定是需要启动的,那么在启动的时候,就会把自己的机器信息写到到服务注册中心对应的注册表,只要注册好之后,其他调用的服务会有相应的机制,动态获取服务列表,就可以调用到了。
在这里插入图片描述

服务注册中心简单搭建介绍

服务注册中心也是个web服务,当微服务系统启动时会调用服务注册中心对外提供的接口,把自己的机器信息写到对应的注册表中,所以服务注册中心在启动的时候也要指定Tomcat端口(内嵌的也是Tomcat启动)

重要注解:

@EnableEurekaServer
加了这个注解之后就会调用底层jar包的很多功能。

Eureka这个Spring Cloud注册中心处理配置启动的端口,还有需要配置对外发布服务的根访问地址

在这里插入图片描述

注册中心已经有了,服务子系统在启动的时候怎么把自己的信息传给注册中心呢?

回答:在服务子系统中处理引入SpringBoot的依赖包之外,还需要增加依赖包:spring-cloud-starter-netflix-eureka-client(也就是注册中心对应的客户端)。
在这里插入图片描述
客户端增加服务注册地址
Spring Cloud注册中心引入了Eureka的server端,实际上服务子系统对于server端来说都是注册中心的客户端,所有需要引入客户端。引入之后需要在客户端配置文件中增加注册地址

地址是Eureka的server那边对外提供接口的统一地址,作为客户端最后要把信息传给服务注册中心,要调用到对外的接口,这里就是配置接口地址的地方

在这里插入图片描述

客户端增加服务名称

客户微服务在启动的时候把自己的一些信息传到Eureka的server端,还需要告诉Eureka,当前的这个客户微服务实例对应系统的整个服务的名称。

比如:
在这里插入图片描述
客户端相互调用
在这里插入图片描述
调用的时候参数URL就是调用在配置文件中设置的应用名称。
底层最终调用实际上就是从Eureka注册中心通过应用名称找到对应机器列表的地址,就可以知道要调用的微服务的所有机器列表实例,就可以在本地轮询去调用,每次调用一台机器。
实际的注册表信息如下图
在这里插入图片描述
微服务搭建步骤简要总结
①、引入注册中心
②、所有微服务都加上Eureka客户端的jar包
③、注册信息
④、每个微服务之间使用注册的服务名称相互调用

转载地址:http://sayai.baihongyu.com/

你可能感兴趣的文章
hdu 1258 确定比赛名次
查看>>
hdu 3342 拓扑,是否存在环
查看>>
poj 1860 拓扑。。
查看>>
poj 2553 The Bottom of a Graph 未完
查看>>
inux下如何统计一个目录下的文件个数以及代码总行数(转)
查看>>
Linux下 虚拟机Bochs的使用
查看>>
glib-读取配置文件
查看>>
SonarQube 静态代码检查的安装
查看>>
嵌入式Linux驱动开发的知识图谱
查看>>
Algorithm 4th environment setup
查看>>
Linux设备驱动开发基础之互斥与同步基础
查看>>
Linux驱动开发之内存管理基础
查看>>
用gitlabCI快速搭建一个GitServer与CI
查看>>
SPI Nor Flash
查看>>
ARM Linux BenchMark
查看>>
完整精确导入Kernel与Uboot参与编译了的代码到Source Insight,Understand, SlickEdit
查看>>
Freescale IMX6 Android (5): APP通过JNI控制LED
查看>>
PPT分享: Linux启动流程 关于initrd与initramfs的区分及其发展历程
查看>>
Freescale IMX6 Android (7): Android启动动画死循环 Home界面不出来与pid XXX exit 可能的原因汇总
查看>>
Yocto i.MX6 (TQIMX6) (01) : 3.14.28内核的适配
查看>>