前言


上一节通过RestTemplate实现了生产者与消费者之间的调用关系,也提到了这种方式在分布式架构中是存在着问题的。
例如:商品微服务是消费者的同时还是其他服务的生产者,那么他们的调用配置都需要变更。当然可以采用nginx等反向代理来实现,但是当有数百个微服务岂不是被搞si了。针对这个问题引出了服务发现的概念,如下图所示:

服务发现机制:
1、服务生产者和服务消费者在启动的时候都会把自己的网络地址(IP+端口)注册到服务发现组件服务消费者要调用的时候先到服务发现组件里面查询服务提供者的IP+端口然后进行调用。
2、任何服务都有宕掉的可能,如果服务生产者挂了那就需要将服务发现组件里注册的对应节点剔除掉,所以当服务消费者和生产者注册到服务发现组件后就会隔段时间发起心跳,如果接受不到节点信息就剔除掉。

服务发现组件功能

1、服务注册表
可以将服务注册表看做是数据库,因为本身就是将当前可用服务示例的网络信息(IP+端口)记录下来。提供查询API和管理API,使用查询API可以获得可用的服务示例,使用管理API实现注册和注销;
2、服务注册
将网络信息(IP+端口)存放到服务注册表
3、健康检查
上面提到的心跳检查就是其中一个功能,将不可用的网络信息进行剔除,保证服务消费者能够调用到正常的网络信息。

服务发现的方式

1、客户端发现
例如:Eureka、zookeeper等。
2、服务器端发现
例如:Consul + nginx

Eureka简介

Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转义的目的。Spring Cloud将它集成在其子项目spring-cloud-netflix中,用来实现Spring Cloud的服务发现功能。

实现一个Eureka Server

第一步:添加Eureka依赖(pom.xml)
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
第二步:Spring Boot启动类增加注解
/*** @Auther: Lin* @Date: 2019-07-29 23:01* @Description: 使用Eureka做服务发现*/
@SpringBootApplication
@EnableEurekaServer
public class MicroserviceDiscoveryEurekaApplication {public static void main(String[] args){SpringApplication.run(MicroserviceDiscoveryEurekaApplication.class,args);}
}
第三步:增加Eureka配置(application.ml)
server:port: 8761
eureka:client:# 是否要注册到其他Eureka Server实例register-with-eureka: false# 是否要从其他Eureka Server实例获取数据fetch-registry: falseservice-url:defaultZone: http://127.0.0.1:8761/eureka/

备注:Eureka默认端口为8761。

第四步:启动测试

访问地址:http://127.0.0.1:8761,如下图所示:

出现上面控制台页面说明Eureka单机部署成功。

将用户(user)和商品(goods)服务注册到Eureka Service

基于SpringCloud实战(一)中的microservice-consumer-goodsmicroservice-provider-user微服务,将服务注册到Eureka Service。

第一步:添加Eureka Client依赖(pom.xml)
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

备注:goods和user两个工程pom.xml都需添加

第二步:添加注解
#microservice-provider-user 微服务
@SpringBootApplication
#@EnableEurekaClient
public class MicroserviceProviderUserApplication {public static void main(String[] args) {SpringApplication.run(MicroserviceProviderUserApplication.class, args);}
}#microservice-consumer-goods 微服务
@SpringBootApplication
#@EnableEurekaClient
public class MicroserviceDiscoveryEurekaApplication {public static void main(String[] args) {SpringApplication.run(MicroserviceDiscoveryEurekaApplication, args);}
}

备注:Spring Cloud 的Edgware版本之前客户端启动类需要增加@EnableDiscoveryClient或 @EnableEurekaClient,从Edgware开始,可省略

第三步:添加配置
#microservice-provider-user 微服务
spring:application:# 指定注册到eureka server上的服务名称name: microservice-provider-user
eureka:client:service-url:# eureka server的通讯地址,注意路径defaultZone: http://127.0.0.1:8761/eureka/instance:# 是否将IP注册到eureka server,false:否,ture:是prefer-ip-address: true#microservice-consumer-goods 微服务
spring:application:# 指定注册到eureka server上的服务名称name: microservice-consumer-goods
eureka:client:service-url:# eureka server的通讯地址,注意路径defaultZone: http://127.0.0.1:8761/eureka/instance:# 是否将IP注册到eureka server,false:否,ture:是prefer-ip-address: true
第四步:启动测试
  1. 按照顺序启动Eureka Server、用户微服务和商品微服务;
  2. 访问Eureka控制台查看,地址:http://127.0.0.1:8761

常见问题汇总

问题1:Eureka的注册页面,发现有一串红字:
EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY’RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.

原因:出现以上报错是因为Eureka进入了自我保护机制,默认情况下,如果EurekaServer在一定时间内没有接收到某个微服务实例的心跳时,EurekaServer将会注销该实例(默认90s)。但是当网络发生故障时,微服务与EurekaServer之间无法通信,这样就会很危险了,因为微服务本身是很健康的,此时就不应该注销这个微服务,而Eureka通过自我保护机制来预防这种情况,当网络健康后,该EurekaServer节点就会自动退出自我保护模式;
这时再次将客户端微服务启动,刷新服务注册中心会发现,自我保护状态已取消。

配套代码

主代码库:https://github.com/yundianzixun/spring-cloud-study
Eureka Service:https://github.com/yundianzixun/spring-cloud-study/tree/master/microservice-discovery-eureka
microservice-provider-user :https://github.com/yundianzixun/spring-cloud-study/tree/master/microservice-provider-user
microservice-consumer-goods:https://github.com/yundianzixun/spring-cloud-study/tree/master/microservice-consumer-goods

Spring Cloud(Greenwich版)-02-服务注册与服务发现-Eureka入门相关推荐

  1. Spring Cloud Greenwich 新特性和F版升级分享

    来源:https://dwz.cn/LkwPsmut 前几天介绍了,关于Spring Cloud Greenwich版本发布的官方博客翻译:Spring Cloud Greenwich.RELEASE ...

  2. 【Spring Cloud Alibaba】(一)微服务介绍 及 Nacos注册中心实战

    文章目录 前言 I.微服务与Spring Cloud II.Nacos 注册中心 III.Spring Cloud Alibaba Nacos 实战 1.新建父工程 2.新建demo-a 服务 3.新 ...

  3. Spring Cloud Alibaba基础教程:几种服务消费方式(RestTemplate、WebClient、Feign)

    热门:Spring Cloud Greenwich.RELEASE 正式发布!一个非常有看头的版本! 通过<Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现&g ...

  4. 《Spring Cloud Netflix官方文档》2. 服务发现:Eureka服务器

    2. 服务发现:Eureka服务器 2.1 如何创建Eureka服务器 引用org.springframework.cloud的spring-cloud-starter-eureka-server就可 ...

  5. 《Spring Cloud Netflix官方文档》1.服务发现:Eureka客户端

    1.     服务发现:Eureka客户端 服务发现是微服务架构的关键原则之一.使用手动配置或一些约定方式来处理多服务多实例的方式是非常困难,并且十分脆弱的.Eureka同时是Netflix服务发现的 ...

  6. Spring Cloud Greenwich版本已发布!

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 就在1月23日,spring的官方博客发布了Spring Cloud Greenwich版本正式发 ...

  7. 阿里新框架发布!干掉Spring Cloud,换下Dubbo,微服务王者来了!

    目前,但凡谈及微服务技术选型,就必然会遇到一个两难的抉择,到底该采用Dubbo,还是该选择Spring Cloud呢? 当初阿里于2017年宣布重新开源Dubbo,近年来Dubbo发展速度和势头可谓是 ...

  8. Spring Cloud Greenwich 正式发布,Hystrix 即将寿终正寝!

    Spring Cloud Greenwich 正式版在 01/23/2019 这天正式发布了,下面我们来看下有哪些更新内容. 生命周期终止提醒 Spring Cloud Edgware Edgware ...

  9. 微服务等于Spring Cloud?一文告诉你微服务到底是什么

    作者:TIM XU 原文:https://xiaoxubeii.github.io/articles/microservices-architecture-introduction/ 1 微服务初探 ...

  10. Spring Cloud Greenwich 新特性和F升级分享

    2019.01.23 期待已久的Spring Cloud Greenwich 发布了release版本,作为我们团队也第一时间把RC版本替换为release,以下为总结,希望对你使用Spring Cl ...

最新文章

  1. i5处理器学计算机怎么设置,大家买计算机首先要看CPU,i5、i7、i9,你知道CPU到底是什么吗?...
  2. 如何做好网站开发项目需求分析(转)
  3. 20以内混合加减法100题_一年级数学20以内加减法混合运算练习题,寒假练习巩固!...
  4. ITK:重视Valued图像的区域最小值
  5. 两种方法设置disabled属性
  6. 基于InkCanvas实现的桌面涂鸦工具-[ WPF开发 ]
  7. nodejs+webpack+vue以及npm安装对应的库
  8. 信息学奥赛C++语言: 小明的步行
  9. linux服务器启动过程
  10. [学习指南]运动是基于4412嵌入式技术开发板学习步骤
  11. Linux服务器集群系统(二)——LVS集群的体系结构
  12. 【感悟】此时此刻,新年快乐
  13. 百度js选择器fox
  14. 这一晚注定属于C罗!回归首秀梅开二度,现场超过7万球迷见证这场胜利
  15. 数据结构-------图(最通俗易懂的文章)(一)图的数据结构及其遍历
  16. 【Vue】var that=this写法的意义
  17. 【WPS技能】xlsx表格根据单元格的值改变行背景色
  18. 关于selenium配置Chrome驱动(Windows系统)
  19. 自步学习(Self-paced Learning)
  20. 路由器重温——BGP路由-1

热门文章

  1. freeswitch 文件包含关系图
  2. Linux3.2.8系统启动过程及启动延时初步分析
  3. 数据包接收系列 — 上半部实现(网卡驱动)
  4. 1113 Integer Set Partition(25 分)
  5. MongoDB最佳实践
  6. ASP.NET---母板应用
  7. 如何把netterm的内容输出到文件_python pandas如何输出csv文件
  8. csv文件导入 navicat会少了很多记录_跟小白学Python数据分析——数据导入1
  9. mysql 内存表 限制_MySQL内存表的弊端
  10. 评委打分表模板_杭州爸爸自制《奖惩表》火遍网络:请好好爱那个写作业的小孩...