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

SpringCloud微服务(01):Eureka组件,管理服务注册与发现的更多相关文章
- ①SpringCloud 实战:引入Eureka组件,完善服务治理
简介 Netflix Eureka 是一款由 Netflix 开源的基于 REST 服务的注册中心,用于提供服务发现功能.Spring Cloud Eureka 是 Spring Cloud Netf ...
- 【Eureka篇三】Eureka如何管理服务调用(6)
在Eureka Client启动时,将自身的服务的信息发送到Eureka Server.然后进行2调用当前服务器节点中的其他服务信息,保存到Eureka Client中.当服务间相互调用其它服务时,在 ...
- 玩转springcloud(三):服务的提供者与调用者(注册于发现)
一.简介 上文我们实践了cloud的注册中心的单服务于多节点的搭建,房子造好了得有人来住不是,这篇我们实践下服务提供者于调用者的案例,也就是服务端和客户端的调用. 本文会设计三个module:注册中心 ...
- Spring Cloud之Eureka服务注册与发现
解决什么问题 ➟阐述微服务以及服务注册发现的部分概念 ➟阐述Eureka服务注册与发现的部分原理及细节 为什么需要服务中心 过去,每个应用都是一个CPU,一个主机上的单一系统.然而今天,随着大数据和云 ...
- SpringCloud微服务:Sentinel哨兵组件,管理服务限流和降级
源码地址:GitHub·点这里||GitEE·点这里 一.基本简介 1.概念描述 Sentinel 以流量为切入点,从流量控制.熔断降级.系统负载保护等多个维度保护服务的稳定性.包括核心的独立类库,监 ...
- SpringCloud的入门学习之概念理解、Eureka服务注册与发现入门
1.微服务与微服务架构.微服务概念如下所示: 答:微服务强调的是服务的大小,它关注的是某一个点,是具体解决某一个问题.提供落地对应服务的一个服务应用,狭意的看,可以看作Eclipse里面的一个个微服务 ...
- SpringCloud微服务治理技术入门(SCN)
1.集群.分布式.微服务 首先先理解三个感念 什么是集群?: 同一个业务,部署在多个服务器上,目的是实现高可用,保证节点可用! 什么是分布式?: 一个业务分拆成多个子业务,部署在不同的服务器上,每个子 ...
- SpringCloud(3)---Eureka服务注册与发现
Eureka服务注册与发现 一.Eureka概述 1.Eureka特点 (1) Eureka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移. (2) Eureka 主管服务 ...
- java框架之SpringCloud(3)-Eureka服务注册与发现
在上一章节完成了一个简单的微服务案例,下面就通过在这个案例的基础上集成 Eureka 来学习 Eureka. 介绍 概述 Eureka 是 Netflix 的一个子模块,也是核心模块之一.Eureka ...
随机推荐
- 《Java基础知识》Java技术总结
1. Java 知识点总结 Java标示符.保留字和数制:https://www.cnblogs.com/jssj/p/11114041.html Java数据类型以及变量的定义:https://ww ...
- ASP.NET4.0中JavaScript脚本调用Web Service 方法
环境:VS2019 .net 4.0 framework 根据教材使用ScriptManager在JavaScript中调用Web service 时,失败.现将过程和解决方法记录如下: 1.定义W ...
- angular8 导出excel文件
angular package 1.xlsx npm install xlsx --save 2.file-saver npm install file-saver --save npm instal ...
- 查询BPC动态表
今天BASIS说后台有张数据表(/1CPMB/ABLBCAD)数据量已超过20亿,需要归档,但是不清楚是哪个业务模型. 有两种方式可以查询BPC动态生成的表名. (1)根据命名规则 环境前缀:apps ...
- PuppeteerSharp读取页面完整HTML(.NetCore)
1.使用NUGET安装PuppeteerSharp 通过工具或者命令方式安装 2.初始化浏览器 await new BrowserFetcher().DownloadAsync(BrowserFetc ...
- day01-day02 初识java、注释、变量、变量命名、基本数据类型
1. 初识java 1) 什么是java java是一门高级的计算机编程语言 2) JDK的安装 2.1) 下载2.2) 安装2.3) 验证 3) 环境变量的配置 3.1) 打开环境变量3.2) 配置 ...
- Hyperledger Fabric:最简单的方式测试你的链码
一直以来,写完链码进行测试都要先搭建一个Fabric环境,然后安装链码进行测试,实际上Fabric提供了最为简单的方式可以允许我们对编写的应用链码进行功能测试,不需要搭建一个完整的Fabeic环境.而 ...
- C#线程学习笔记二:线程池中的工作者线程
本笔记摘抄自:https://www.cnblogs.com/zhili/archive/2012/07/18/ThreadPool.html,记录一下学习过程以备后续查用. 一.线程池基础 首先,创 ...
- Git worktree 使用笔记【转】
gitworktree 本地仓库的多个分支在对应的文件夹内管理,能够减少很多操作,便捷高效~ 一 worktree 的基本概念和操作 再也不用克隆多个仓库啦!git worktree 一个 git 仓 ...
- 打包vue文件,上传到服务器
主要步骤: 1. npm run build生成dist文件夹 2. 将dist文件夹上传到服务器上 3. 服务器上配置nginx,访问路径指向dist文件夹下的index.html,这样当访问ngi ...