谈到微服务就不得不提到spring cloud,spring cloud作为拥有众多方法和工具的一个强大框架,在我们做微服务架构项目的时候扮演了重要的角色。
在我刚接触到微服务的时候并不知道微服务是一个什么概念,认为这是一个新的一门技术,在学了一部分知识后,对微服务有了一点其浅薄的认知,其实微服务指一种区别于传统架构思想的一种新的架构思想,之前我们用的最多的就是单体架构,也就是将一个项目创建在一个spring boot项目上,所有的模块都写在一起,当然在并发量不高的前提下,这无疑是一种简单设计模式,但是在互联网高速发展,计算机使用者爆炸式增长,访问量高得离谱的现在,单体架构就显得力不从心了,所以我们就想到了一种新的设计思想,那就是微服务.
所谓微服务就是将一个spring boot项目拆封成多个模块,而每个模块都是一个单体架构的spring boot项目从而实现分而治之,这样一来就可以将多个模块部署到多台服务器上,从而减轻各个服务器的压力,并且提高了可维护性,降低了维护成本和模块之间的耦合性,这样看来微服务确实将传统的单体架构项目变得更加灵活,而单纯使用微服务架构是解决不了问题的,以为会面临很多问题,比如当某个模块部署的ip发生改变,那么原本写死的url就失效了,就得重新换一个url这样一来维护成本就又变高了,所以spring cloud框架闪亮登场,这个框架提供了很多实用的组件,比如eureka,spring cloud loadbalance,nacos等等,而这些组件就很好的解决了这些问题。
那么接下来我就说说在这些组件的用法,首先就是eureka,这是一个服务注册组件,目的就是解决微服务中不同模块之间的通信,比如模块更换部署的服务器了,那么就需要更新模块信息,有了eureka服务生产者就可以将信息同步到eureka,这样服务消费者就可以随时获取到最新的信息,从而完成通信,那么要使用eureka就需要导入spring cloud依赖和eureka依赖,然后手动创建一个模块将其作为注册中心,并在配置文件中配置eureka位置,然后在消费者和服务者的配置文件中配置eureka的位置,然后在服务消费者的远程调用部分就可以将eureka中的要调用的服务名的集合获取到,然后就可以获取到动态的url,从而解决这一个问题。
还有就是nacos,这是一个spring cloud alibaba框架的一个服务注册组件,功能和eureka相同,但是用法比eureka简单,只需要将nacos下载好并启动,然后将spring cloud alibaba和nacos依赖导入,然后在配置文件中配置好nacos的地址,就可以直接在远程调用部分直接获取到服务生产者的url,并且在这组件中还可以手动继续上线和下线,还可以设置权重来达到访问量的偏移。
当然有了服务注册中心还不够这样只是可以获取到动态的信息了,但是如果生产者是集群模式怎么办,总不能逮住一个可劲儿造吧,所以就需要用到负载均衡的组件了,首先介绍的就是spring cloud loadbalance,它的作用就是将并发请求按照负载均衡策略来进行分配,这个组件是配合远程调用的类RestTemplate来使用的,在将resttemplate注入的时候加上注解@loadbalanced注解,这样resttemplate在远程调用的时候就可以达到负载均衡了,而负载均衡的策略有三种,默认轮询,还有就是随机,最后一一种就是自定义负载均衡策略,这个组件相对使用简单,只要将依赖导入,就可以使用提供的注解了。
但是如果我的服务生成者有多个url怎么办,难道我用string一个一个拼接然后用resttemplate一条一条发送吗,肯定是不行的,那么openfeign就起到作用了,这是一个服务调用组件,目的是更加方便的去调用服务中不同的处理器,方便就方便在,我们可以自定义一个接口然后用@FeignClient修饰后面加上要调用的服务名称,并且在该模块的启动类上应用注解@EnableFeignClients,然后用将服务生产者中的方法重写一遍,并且路径也一样,这样在controller中就可以通过直接调用这个方法来远程调用到服务生产者的该处理器上这样一来,不仅方便调用,而且还方便维护,增强了代码的可读性