springcloud使用之服务的注册发现与消费
随着spring的发展我们发现spring提供了越来越多的项目来帮我们简化框架的搭建,使我们站在巨人的肩膀行走,让我们更关注于开发我们的逻辑。随着技术的更替,我们的新项目也逐渐使用了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做了什么,为什么需要我们这么使用,这就是我在了解一个技术的过程。文章的最后还是想说,虽然文章很简单,但也会存在很多不足的地方,希望大家不吝指教。
springcloud使用之服务的注册发现与消费的更多相关文章
- SpringCloud服务的注册发现--------Eureka
1,什么叫做服务的注册与发现 服务的注册与发现基于注册中心,注册中心本身是一个服务,也相当于一个载体,其他服务的注册需要注册到这个注册中心上. 注册:当服务器启动的时候,会将自己的服务器信息,通过别名 ...
- SpringCloud服务的注册发现--------zookeeper实现服务与发现 + Ribbon实现客户端负载均衡
1,Eureka 闭源了,但是我们可以通过zookeeper实现注册中心的功能. zookeeper 是一个分布式协调工具,可以实现服务的注册和发现,配置中心,注册中心,消息中间件的功能 2,工具准备 ...
- SpringCloud服务的注册发现--------Eureka自我保护机制
1,Eureka 自我保护机制 Eureka注册中心,一些服务会注册到Eureka 服务器上,例如之前的member服务,order服务. 在网络不通的情况下,如果一个bmember 挂了,但是Eur ...
- SpringCloud服务的注册发现--------Eureka实现高可用
1,Eureka作为注册中心,掌管者服务治理的功能,十分重要,如果注册中心的服务一旦宕机,所有的服务就会挂了,为此,实现注册中心的集群(高可用)就显得十分必要了 2,Eureka 搭建集群 实现原理就 ...
- 使用Apache Mesos和Consul实现服务的注册发现
为保证基于Docker应用程序和服务都具有高性能和可用性,设计出一种具有服务发现,高可用性和容错能力的解决方案非常重要. 我们使用Apache Mesos 和Mesosphere的 Marathon实 ...
- SpringCloud服务的注册发现--------consul实现服务与发现
1,consul也可以替代Eureka实现注册和发现的功能,即注册中心. 之前在linux环境通过consul + upsync + nginx 实现nginx 的动态负载均衡 https://www ...
- Nacos配置中心和服务的注册发现
在上一篇中,我们已经把Nacos的集群搭建好了,那么既然已经搭建好了,就要在咱们的项目中去使用.Nacos既可以做配置中心,也可以做注册中心.我们先来看看在项目中如何使用Nacos做配置中心. Nac ...
- springcloud如何实现服务的注册?
1.服务发布时,指定对应的服务名,将服务注册到 注册中心(eureka zookeeper)2.注册中心加@EnableEurekaServer,服务用@EnableDiscoveryClient,然 ...
- SpringCloud教程 | 第一篇: 服务的注册与发现
一.spring cloud简介 spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选.分布式会话等等.它运 ...
随机推荐
- 浏览器事件循环 & nodejs事件循环
第1篇:如何理解EventLoop——宏任务和微任务篇 宏任务(MacroTask)引入 在 JS 中,大部分的任务都是在主线程上执行,常见的任务有: 渲染事件 用户交互事件 js脚本执行 网络请求. ...
- 【csp模拟赛4】基站建设 (station.cpp)
[题目描述] 小 Z 的爸爸是一位通信工程师,他所在的通信公司最近接到了一个新的通 信工程建设任务,他们需要在 C 城建设一批新的基站. C 城的城市规划做得非常好,整个城市被规整地划分为 8 行 8 ...
- codevs 1814 最长链题解
codevs 1814 最长链题解 题目描述 Description 现给出一棵N个结点二叉树,问这棵二叉树中最长链的长度为多少,保证了1号结点为二叉树的根. 输入描述 Input Descripti ...
- 编译.tex文件时出现的问题
Error: “the second byte of the cjk code is out of range” 发生在使用pdflatex和bibtex时.可能是.bib文档中出现了中文字符,包括中 ...
- shell脚本编程基础之for循环
循环结构 循环需要有进入条件和退出条件,如果没有退出条件,则就会一直循环下去 for 变量 in 列表:do 循环体 done 生成列表及示例 {1..100}:生成1到100的整数列表 `comma ...
- webpack系列之安装(Mac OS)
1. webpack介绍,可参考Webpack中文文档 2. 安装webpack之前先需要安装npm,可参看NPM的使用介绍 3. 安装webpack,可参考Webpack入门教程 ========= ...
- [RoarCTF]Easy Java
目录 [RoarCTF]Easy Java 知识点 1.WEB-INF/web.xml泄露 [RoarCTF]Easy Java 题目复现链接:https://buuoj.cn/challenges ...
- winrunner 测试工具
WinRunner在项目中的作用 (winrunner测试设计:http://blog.chinaunix.net/uid/301743/year-2013-list-81.html?/178 ...
- postgresql中pg_walfile_name()
pg_walfile_name(lsn pg_lsn):将wal位置转换成文件名 pg_lsn数据类型可以用于存储LSN数据,LSN是指向WAL中某个位置的指针.pg_lsn用XLogRecPtr的形 ...
- 为CentOS安装python3
摘自:https://www.jianshu.com/p/7c2b62c37223 1. 安装依赖 不要复制往下看 yum install openssl-devel bzip2-devel expa ...

