springcloud使用之服务的注册发现与消费
随着spring的发展我们发现spring提供了越来越多的项目来帮我们简化框架的搭建,让我们站在巨人的肩膀上进行开发,让我们更关注于开发我们的逻辑。随着我们老项目的发展,老项目大部门使用的都是spring,springmvc,mybatis,工作中就可能会遇到重构他们,随着技术的更替,我们的新项目也逐渐使用了springboot来构建他们,它可以帮我们省去很多配置,让我们更迅捷的开发。我们这篇文章讲解的是springcloud,为什么要先提到springboot呢,因为它是基于springboot的一个项目,它包含了多个子项目,这些子项目融合了现在很多成熟的开源框架,来帮助我们完成我们的设计需要。在开始spring cloud之前我先说一下我遇到的场景。spring boot跟spring cloud这两个项目在我印象中两年前就很火了,然而那时候我们大部分公司可能用的还是springmvc,spring,mybatis,我们做项目也是采用分布式的方式,通过dubbo跟zookeeper完成服务的注册与发现,随着技术的换代,我们新项目的项目决定使用spring boot来快速构建,项目中不用的业务采用微服务的架构风格使用spring cloud来进行通信调用,当时对于spring boot跟spring cloud的学习也没有应用,在使用新技术搭建项目的过程中萌生了写这篇文章的想法,巩固并记录,虽然有很多这种文章,但也希望我的文章也对你们有一点点的帮助。
在网上,或者一些技术群里经常能看到几个词,soa、分布式、微服务,好多人也会问这些有什么区别。我对于他们的理接,soa是一种面向服务架构的方式,分布式是多个项目分布在不同的物理机上解决单体机构压力过大等一系列问题,微服务强调的是是一种架构风格,早在很早Martin Fowler就发表过一篇关于微服务的博客,他主要强调微服务是一种架构风格,他们之间采用http的轻量级通信,我在网上看到一个中文翻译过的https://www.jianshu.com/p/4821a29fa998,原文https://martinfowler.com/articles/microservices.html。它们之间也不能说完全有区别,但与不能说他们就是一个东西,它们强调的地方不同。这里话不多说,我们来开始使用spring cloud。
在使用spring cloud的时候我们发现他又很多版本,它不像其他spring的项目版本的命名,它的版本顺序从网上一搜很多介绍,我就不复制过来,还有m、sr等版本就不去介绍了。开始demo之前我们需要先了解一下spring cloud提供的相关组件,Eureka(百度百科):
由百度百科可以知道Eureka,他是netflix的一个服务发现框架,他被spring cloud整合到自己的项目里,他可以帮助我们完成服务的注册与发现,spring cloud还提供了其他的组建consul,因为spring将他们封装我们只需要添加一个注解将pom文件引入启动器就可以使用,这里我们使用Eureka来写demo,我们先来创建项目,我们可以通过https://start.spring.io/来创建项目导入编辑器,这里我们使用工具直接快速创建,原理还是去访问前面的地址帮我们创建项目:
打开idea,file–>new–>project
在我们的主启动类添加注解
@EnableEurekaServer注解意思代表我们使用Eureka作为服务注册中心,默认情况它会把自己当作服务注册到注册中心,我们需要在配置文件禁用该功能
然后我们启动项目,访问项目地址localhost:8881
访问项目发现现在还没有服务注册在上面,接下来我们创建一个服务的提供者并注册,按照上面的步骤继续创建项目,在主程序添加注解@EnableDiscoveryClient,这个注解的意思是让注册中心发现
配置文件
然后我们编写一个简单的求和方法
这里注意我们写的方法一定是放在主程序包下的,否则访问不到会提示404
启动项目发现服务的提供者已经注册上去了
现在服务的注册中心跟提供者都有了,我们需要在创建一个消费者,消费者调用我们写好的方法,输出结果。这篇文章会介绍几种服务的消费者,先以LoadBalancerClient为例写一个例子,创建一个新项目再主程序上添加注解@EnableDiscoveryClient,并添加文件:
配置文件:
再创建一个调用的controller
启动访问项目地址:
为什么这么写,这么用先不做介绍,后面的文章会分享为什么这么用,spring cloud做了什么。继续,现在把消费者换成Ribbon
访问项目
与上面的不同之处在于我们再RestTemplate上添加@LoadBalanced注解,controller只需要写服务的名字就可以调用到服务的提供者,这里简单说一下,我们把RestTemplate添加到容器中的是因为我们要使用spring cloud给我们提供的自动配置,spring boot的很多自动配置类都是***AutoConfiguration,原因在这,我们还是简单说一下,后面的文章再详细介绍,包括我们调用服务只写了服务的名字是因为拦截器帮我们把名称替换成了IP地址加上端口号的形式,它是怎么加上的这些这里先不做解释。下面继续介绍Feign,Feigin也可以帮我们完成我们的功能,当然他还整合了更多的更多功能,我们先来试一下Feign的使用
配置文件:
主程序:
创建一个controller跟service
访问项目
发现这样写就跟我们用dubbo差不多,通过注入服务的方法就能调用,这里面要注意的地方是你写的这个接口里的方法里面传的参数一定要指定参数名,否则启动项目会报一个错误
如果不指定参数也会报错
关于spring cloud服务的发现注册的使用就简单讲到这里,文章可以帮助没有了解spring cloud的新手上路,让你简单了解他如何使用,集中组件在写demo的时候你会发现什么样的更适合你,实际应用还需要更深入的了解我们所使用的组件。对于技术的学习我个人的习惯是先简单使用,再深化。文章只是对spring cloud组件的简单使用,在写过的demo中会发现spring cloud提供了很多组件来帮我们完成同样的事情,在我们实际应用中应该如何选择,这就是我们逐渐对组件深化的过程,然后看一下spring cloud做了什么,为什么需要我们这么使用,这就是我在了解一个技术的过程。文章的最后还是想说,虽然文章很简单,但也会存在很多不足的地方,希望大家不吝指教。
相关文章