SpringBoot 变装 SpringCloud 大佬
如何计划拆分成 springboot cloud 微服务的初步设计计划。
图解有利于各位在学习中进行参考和理解!
SPringCloud 的核心主件的流程图,希望可以帮助到大家。
整个调用流程:
1.首先每个服务启动的时候都需要往注册中心进行注册。
2.用户先对网关发起下单请求,网关收到请求后发现呃,是下单操作,要到订单系统,然后把请求路由到订单系统。
3.订单系统啪啦啪啦一顿操作,然后通过Feign去调用库存系统减库存,通知仓储服务发货,调用积分系统加积分。
4.在发起调用之前,订单系统还得通过Ribbon去注册中心去拉取各系统的注册表信息,并且挑一台机器给Feign来发起网络调用。
Spring Cloud 是一个全家桶式的技术栈,包含了很多组件。先从其最核心的几个组件入手,来剖析一下其底层的工作原理。也就是 Eureka、Ribbon、Feign、Hystrix、Zuul 这几个组件
Eureka/Consul/Zookeeper:服务发现 (根据情况选择一个,eureka 已经宣布闭源)
Hystrix:断路器
Zuul:智能路由
Ribbon/Feign:客户端负载均衡 (Feign 用的更多)
Turbine&hystrix-dashboard:集群监控 Springcloud-config:远程获取配置文件
如果使用Spring Cloud来实现,需要哪些组件?
Eureka:
首先,我们需要一个注册中心Eureka,主要负责每个服务的注册和发现。
每个微服务中都有一个Euraka client组件,专门负责将这个服务的服务id(serviceId)、ip、端口等信息注册到Eureka server中。
Euraka Server是一个注册中心,该组件内部维护了一个注册表,保存了各个服务所在的机器ip和端口号等信息。
Feign:
其次每个服务还需要一个远程服务调用的组件Feign,他主要负责与其他服务建立连接,构造请求,然后发起请求来调用其他服务来获取数据。
Ribbon:
然后我们一个服务可能会部署很多台机器,那么我们使用Feign去调用这个服务的时候,到底把请求发送到哪台机器上去呢?此时我们就需要一个组件来根据一定的策略来选择一台机器。不管怎么选的,总之得选一台机器给Feign去调用就好了。
这个组件就是Ribbon,Ribbon主要负责就是负载均衡。Ribbon会定期去从Eureka注册中心拉取注册中心,缓存到本地,每次发起远程调用的时候,Ribbon就会从Eureka注册表拉取下来的数据中挑选一个机器让Feign来发起远程调用。
Zuul:
我们这么多的微服务,如果一个服务一个IP,使用方都需要进行调用的话,是不是得知道每一个服务的IP地址才行呢?那得记住多少才行呀,多不好管理。
Spring Cloud也给我们提供了一个组件,那就是Zuul,他是一个网关,就是负责网络的路由的。每个请求都经过这个网关,我们还可以做统一鉴权等等很多事情SSDN@写程序的小王叔叔
Hystrix:
还有一个东西也得说一下,就是Hystrix,它是一个隔离、熔断以及降级的一个框架。
在微服务的相互调用过程中,可能会出现被调用服务错误或者超时的情况,从而导致整个系统崩溃不可用,也就是我们常说的服务雪崩问题,Hystrix的存在就是为了解决这种问题的。
异常:eureka No mapping for GET /eureka/js/wro.js
网上的方法都是:
给 config 增加了/config 访问前缀
spring.resources.add-mappings=true
最后我的解决方法是:
spring.resources.add-mappings=true