SpringCloud微服务(01):Eureka组件,服务注册与发现
本文源码:GitHub·点这里 || GitEE·点这里
一、Eureka基本架构
1、Eureka简介
Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。
2、Eureka角色结构图
角色职责如下:
1)、Register:服务注册中心,它是一个Eureka Server ,提供服务注册和发现功能。
2)、Provider:服务提供者,它是一个Eureka Client ,提供服务。
3)、Consumer:服务消费者,它是一个Eureka Cient ,消费服务。
3、Eureka中几个核心概念
1)、Registe服务注册
当Client向Server 注册时,Client 提供自身的元数据,比如IP 地址、端口、运行状况指标的Uri 、主页地址等信息。
2)、Renew服务续约
Client 在默认的情况下会每隔30 秒发送一次心跳来进行服务续约。通过服务续约来告知Server该Client仍然可用。正常情况下,如果Server在90 秒内没有收到Client 的心跳,Server会将Client 实例从注册列表中删除。官网建议不要更改服务续约的间隔时间。
3)、Fetch Registries获取服务注册列表信息
Client 从Server 获取服务注册表信息,井将其缓存在本地。Client 会使用服务注册列表信息查找其他服务的信息,从而进行远程调用。该注册列表信息定时(每30 秒) 更新一次。
4)Cancel服务下线
Client 在程序关闭时可以向Eureka Server 发送下线请求。发送请求后,该客户端的实例信息将从Server 的服务注册列表中删除。该下线请求不会自动完成,需要在程序关闭时调用以下代码:
DiscoveryManager.getinstance().shutdownComponent();
5) Eviction服务下线
在默认情况下,当Client 连续90 秒没有向Server 发送服务续约(即心跳〉时,Server 会将该服务实例从服务注册列表删除,即服务下线。
二、Eureka案例代码
1、项目基本结构图
主要包括两个注册中心(集群) node01-eureka-7001 node01-eureka-7002 一个服务提供方 node01-provider-8001 一个服务消费方 node01-consume-8002
2、配置本机的Host文件
# cloud host 127.0.0.1 registry01.com 127.0.0.1 registry02.com 127.0.0.1 provider-8001.com
3、注册中心代码
1)Eureka注册中心依赖
<dependencies> <!--eureka-server服务端 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> </dependencies>
2)核心配置文件
server: port: 7001 spring: application: name: node01-eureka-7001 eureka: instance: hostname: registry01.com prefer-ip-address: true client: # false表示不向注册中心注册自己 register-with-eureka: false # false表示该端就是注册中心,维护服务实例,不去检索服务 fetch-registry: false service-url: # 单点注册中心 # defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ # 集群注册中心 defaultZone: http://registry02.com:7002/eureka/
这里采用集群的配置,如果有多个集群,逗号分隔,如下写法就好:
defaultZone: http://registry02.com:7002/eureka/, http://registry02.com:7002/eureka/
3)启动类注解
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @SpringBootApplication @EnableEurekaServer // 注册中心注解 public class Application_7001 { public static void main(String[] args) { SpringApplication.run(Application_7001.class,args) ; } }
这样注册中心代码完成。
4)启动项目,如图
暂时没有服务注册进来。
4、服务提供方代码
1)核心依赖
<dependencies> <!-- 将微服务provider侧注册进eureka --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> </dependencies>
2)配置文件如下
server: port: 8003 spring: application: name: node01-provider-8001 eureka: instance: hostname: provider-8001 prefer-ip-address: true client: service-url: # 集群注册中心 defaultZone: http://registry01.com:7001/eureka/,http://registry02.com:7002/eureka/
3)提供一个接口服务
@RestController public class ProviderController { @RequestMapping("/getInfo") public Map<String,String> getInfo (){ Map<String,String> infoMap = new HashMap<>() ; infoMap.put("作者:","知了一笑") ; infoMap.put("时间:","2019-05-18") ; infoMap.put("主题:","SpringCloud微服务框架") ; return infoMap ; } }
4)启动类上需要注解
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; @SpringBootApplication @EnableEurekaClient // 本服务启动后会自动注册进eureka服务中 @EnableDiscoveryClient public class Application_8001 { public static void main(String[] args) { SpringApplication.run(Application_8001.class,args) ; } }
5、服务消费方代码
服务消费方和提供方的代码逻辑基本一致。
1)配置文件
这里不需要注册自己,只是单纯从注册中心获取服务提供方的消息。
server: port: 8002 spring: application: name: node01-consume-8002 eureka: client: register-with-eureka: false service-url: # 集群注册中心 defaultZone: http://registry01.com:7001/eureka/,http://registry02.com:7002/eureka/
2)消费服务代码
注意这里的【server_name】就服务提供方的
spring: application: name: node01-provider-8001
使用RestTemplate调用服务。
@RestController public class ConsumeController { @Autowired private RestTemplate restTemplate ; String server_name = "node01-provider-8001" ; @RequestMapping("/showInfo") public Map<String,String> showInfo (){ return restTemplate.getForObject("http://"+server_name+":8001/getInfo",Map.class) ; } }
到这里,一个基于Eureka的服务注册与发现就完成了。
3)四个服务全部启动
4)访问如下地址
http://localhost:8002/showInfo
获取服务接口结果
{ "主题:": "SpringCloud微服务框架", "作者:": "知了一笑", "时间:": "2019-05-18" }
三、源代码案例
GitHub地址:知了一笑 https://github.com/cicadasmile/spring-cloud-base 码云地址:知了一笑 https://gitee.com/cicadasmile/spring-cloud-base
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
那些 BAT 的面试官,都是怎样面试 iOS开发者的?
前言: 金秋九月,互联网招聘高潮已经来临!相信作为面试官的你,估计开始准备招聘要求或者已经在招聘了!这一篇文章主要想和各位面试官交流一下:我们应该制定一份什么样的招聘要求,才是比较合适的?(* ̄︶ ̄) iOS面试需要注意 1:面试态度 我们在招聘的时候,面试官经常会犯一个问题:各种碾压求职者! 我不知道你招聘这一天发生了什么事情,心情好不好?但是我希望当你去面试的求职者的时候,保持愉悦,给予面试者应该的 -- 善意! 你面试代表你的公司,你的言行举止都直接影响外界对贵公司的感受 同时作为一个管理者的你,成功和愉悦的面试过程也应该是你此刻最希望的! 可能现在他还只是求职者,但是兴许过段时间就是你工位旁边的同事!此刻的善意对你后面愉悦的工作的环境大有裨益! 作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要这是一个我的iOS交流群:638302184,不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长! 如果他无法成为你的同事,大可不必为此纠结,茫茫人海,你此刻的善意,未来在某一刻必定能够兑换! 当然也会有让你不高兴的求职者,那么就让他去...
- 下一篇
SpringCloud微服务(02):Ribbon和Feign组件,服务调用和负载均衡
本文源码:GitHub·点这里 || GitEE·点这里 一、Ribbon简介 1、基本概念 Ribbon是一个客户端的负载均衡(Load Balancer,简称LB)器,它提供对大量的HTTP和TCP客户端的访问控制。 2、负载均衡简介 目前主流的负载均衡方案可分成两类: 1)集中式 即在服务的消费方和提供方之间使用独立的LB设施,可以是硬件,如F5,也可以是软件,如nginx,由该设施负责把访问请求通过某种策略转发至服务的提供方; 2)进程内 将LB逻辑集成到消费方,消费方从服务注册中心获取可用服务列表,然后根据指定负载均衡策略选择合适的服务器。Ribbon就属于该方式。 3、Ribbon负载策略 1) RoundRobinRule 轮询 轮询服务列表List<Server>的index,选择index对应位置的服务。 2) RandomRule 随机 随机服务列表List<Server>的index,选择index对应位置的服务。 3) RetryRule 重试 指定时间内,重试(请求)某个服务不成功达到指定次数,则不再请求该服务。 二、Feign简介 1...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- 2048小游戏-低调大师作品
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- MySQL8.0.19开启GTID主从同步CentOS8
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池