本文源码: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.comprefer-ip-address: trueclient:# false表示不向注册中心注册自己register-with-eureka: false# false表示该端就是注册中心,维护服务实例,不去检索服务fetch-registry: falseservice-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-8001prefer-ip-address: trueclient: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: falseservice-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 {@Autowiredprivate 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

转载于:https://www.cnblogs.com/cicada-smile/p/11273375.html

SpringCloud微服务(01):Eureka组件,管理服务注册与发现相关推荐

  1. SpringCloud微服务:Eureka组件之服务注册与发现

    一.Eureka基本架构 1.Eureka角色结构图 角色职责如下: 1).Register:服务注册中心,它是一个Eureka Server ,提供服务注册和发现功能. 2).Provider:服务 ...

  2. [Abp vNext微服务实践] - 搭建租户管理服务

    一.简介 ABP模板项目中已经提供了租户登录和管理功能,但是模板项目是单体应用结构,无法单独部署租户服务,所以难以满足微服务的需求.本篇文章将会介绍搭建ABP租户管理服务,并单独部署应用. 二.创建工 ...

  3. SpringCloud学习笔记01——Eureka 和 Nacos注册

    SpringCloud01 1.认识微服务 随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构.这些架构之间有怎样的差别呢? 1.0.学习目标 了解微服务 ...

  4. Linux日常运维管理技巧(三)iptables规则备份和恢复、firewalld的9个zone、任务计划cron、chkconfig系统服务管理、添加服务命令、systemctl管理服务

    目录 Linux防火墙-netfilter iptables规则备份和恢复 Linux防火墙-firewalled firewalld的9个zone firewalld关于zone的操作 firewa ...

  5. SpringCloud微服务-服务注册发现-负载均衡-服务调用-服务降级-服务网关-配置中心-消息总线-消息驱动-链路追踪-alibaba-nacos-sentinel-seata理论原理分析

    SpringCloud理论技术 概述 ​ Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.消息总 ...

  6. SpringCloud微服务:Sentinel哨兵组件,管理服务限流和降级

    源码地址:GitHub·点这里||GitEE·点这里 一.基本简介 1.概念描述 Sentinel 以流量为切入点,从流量控制.熔断降级.系统负载保护等多个维度保护服务的稳定性.包括核心的独立类库,监 ...

  7. 跟着狂神学SpringCloud(Rest环境搭建+Eureka服务注册与发现+ribbon+Feign负载均衡+Hystrix+服务熔断+Zuul路由网关+SpringCloud config分布)

    跟着狂神学SpringCloud SpringCloud 回顾之前的知识- JavaSE 数据库 前端 Servlet Http Mybatis Spring SpringMVC SpringBoot ...

  8. SpringCloud微服务治理技术入门

    1.集群.分布式.微服务 首先先理解三个感念 什么是集群?: 同一个业务,部署在多个服务器上,目的是实现高可用,保证节点可用! 什么是分布式?: 一个业务分拆成多个子业务,部署在不同的服务器上,每个子 ...

  9. 服务注册与发现组件 Eureka 应用实战

    本文摘录于笔者出版的书籍 <Spring Cloud 微服务架构进阶>一书 什么是服务注册与发现 在传统的单体应用中,组件之间的调用通过有规范约束的接口进行,实现不同模块间良好协作.在微服 ...

  10. 《深入理解 Spring Cloud 与微服务构建》第六章 服务注册和发现 Eureka

    <深入理解 Spring Cloud 与微服务构建>第六章 服务注册和发现 Eureka 文章目录 <深入理解 Spring Cloud 与微服务构建>第六章 服务注册和发现 ...

最新文章

  1. 行家来信 | 我在国际AI开源组织LFAI当董事的200天
  2. 我的世界之史蒂夫生存记
  3. MIT自然语言处理第四讲:标注
  4. 数学基础知识(高精、快速幂、龟速乘……)
  5. java菜鸟到cto 图_从菜鸟到入门,掌握 Log4j
  6. C语言 指针数组-字符指针数组整型指针数组 char*s[3] int*a[5] 数组指针int(*p)[4]
  7. Java 面向对象的设计思维
  8. 退出所有循环_Python学习之路9—循环的总结
  9. 一个OA解决方案的经典模板
  10. 特征图注意力_CV注意力机制论文阅读笔记
  11. POJ2262 ZOJ1951 UVa543 Goldbach's Conjecture
  12. 稳定婚姻问题和Gale-Shapley算法(转)
  13. linux下查看已经安装的jdk 并卸载jdk的方法
  14. 基于JXTA开发的组内聊天和共享文件P2P软件
  15. 【转】泡天涯,混论坛,你不可不知道的
  16. Matlab中写M文件及调用
  17. 04树莓派迅雷远程下载
  18. 感悟篇:我在B端做数据分析(一)
  19. android 耳机孔 红外,手机遥控器,3.5mm耳机接口红外遥控改造解析
  20. 解决Python下安装unrar后仍然提示Couldn't find path to unrar library...

热门文章

  1. python中的字符类型_八、 python中的数据类型——字符串
  2. shell按照时间排序_初识Shell(3)
  3. vi/vim 基本使用方法
  4. FR常用技巧逐步整理
  5. zuul网关_Spring Cloud第五章:服务网关Zuul
  6. python查找字符串出现次数_python实现从字符串中找出字符1的位置以及个数的方法...
  7. CUPS-Centos6-dockerfile
  8. Flyweight模式
  9. NO.164 禅道的自定义功能:导航和主页的自定义
  10. 设计模式的C++实现 2.工厂模式