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

一、Eureka基本架构

1、Eureka角色结构图


角色职责如下:
1)、Register:服务注册中心,它是一个Eureka Server ,提供服务注册和发现功能。
2)、Provider:服务提供者,它是一个Eureka Client ,提供服务。
3)、Consumer:服务消费者,它是一个Eureka Cient ,消费服务。

2、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


原文地址:https://www.cnblogs.com/cicada-smile/p/11273375.html

时间: 2024-11-02 19:54:57

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

【Eureka篇三】Eureka如何管理服务调用(6)

在Eureka Client启动时,将自身的服务的信息发送到Eureka Server.然后进行2调用当前服务器节点中的其他服务信息,保存到Eureka Client中.当服务间相互调用其它服务时,在Eureka Client中获取服务信息(如服务地址,端口等)后,进行第3步,根据信息直接调用服务.(注:服务的调用通过http(s)调用) 当某个服务仅需要调用其他服务,自身不提供服务调用时.在Eureka Client启动后会拉取Eureka Server的其他服务信息,需要调用时,在Eurek

微服务架构下组件管理规范

软件开发行业,经过一个或多个项目之后,企业都会沉淀出许多非常优秀的组件,这些优秀的组件能够为今后其他的项目提供便利的基础.总体而言,企业的沉淀的组件大致可分为三类:程序类组件.数据类组件.配置类组件. 程序类组件:程序类组件是最常见的组件,包括常见的java.go.python等代码,经过构建之后,用于可独立部署或使用的介质,如:日志工具类.日期工具类.字符串工具类.邮件发送工具类等: 数据类组件:在应用的变更过程中,一般都会涉及到数据库的变更,包括数据库的备份与恢复,数据表的备份与恢复,以及按

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

源码地址:GitHub·点这里||GitEE·点这里 一.基本简介 1.概念描述 Sentinel 以流量为切入点,从流量控制.熔断降级.系统负载保护等多个维度保护服务的稳定性.包括核心的独立类库,监控台,丰富的使用场景验证.(这似乎是阿里开源组件的一贯作风,极其有特点,且特点很规律) 基本特性图: 补刀一句:这种图很多人可能不在意,但是一般官方给这个图就是该中间件的基本使用思路,与核心功能点. 2.基础性概念 资源管理 资源是Sentinel组件中的核心概念之一.应用服务器上脚本,静态页面,A

SpringCloud(3)---Eureka服务注册与发现

Eureka服务注册与发现 一.Eureka概述 1.Eureka特点 (1) Eureka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移. (2) Eureka 主管服务注册与发现,在微服务中,以后了这两者,只需要使用服务的标识符(==就是那个在每个服务的yml文件中取得服务名称==), 就可以访问到服务,不需要修改服务调用的配置文件. (3) Eureka遵循AP原则(高可用,分区容错性),因为使用了自我保护机制所以保证了高可用. 2.Eureka两大组件 两大组

Android窗口管理服务WindowManagerService显示Activity组件的启动窗口(Starting Window)的过程分析

文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8577789 在Android系统中,Activity组件在启动之后,并且在它的窗口显示出来之前,可以显示一个启动窗口.这个启动窗口可以看作是 Activity组件的预览窗口,是由WindowManagerService服务统一管理的,即由WindowManagerService服务负责 启动和结束.在本文中,我们就详细分析WindowManag

Android窗口管理服务WindowManagerService对窗口的组织方式分析

文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8498908 我们知道,在Android系统中,Activity是以堆栈的形式组织在ActivityManagerService服务中的.与 Activity类似,Android系统中的窗口也是以堆栈的形式组织在WindowManagerService服务中的,其中,Z轴位置较低的窗口 位于Z轴位置较高的窗口的下面.在本文中,我们就详细分析Win

spring-cloud-eureka服务注册与发现

Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的.SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能. Eureka包含两个组件:Eureka Server和Eureka Client. Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaSer

SpringCloud-Eureka服务注册与发现二

https://www.cnblogs.com/qdhxhz/p/9357502.html https://blog.csdn.net/weixin_42506093/article/details/86560531 一.Eureka概述 1.Eureka特点 (1) Eureka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移. (2) Eureka 主管服务注册与发现,在微服务中,以后了这两者,只需要使用服务的标识符(==就是那个在每个服务的yml文件中取得服务名称

springcloud微服务系列之服务注册与发现组件Eureka

一.Eurake的简介二.使用Eureka进行服务的注册消费1.创建一个服务注册中心2.创建服务的提供者3.创建服务的消费者总结 一.Eurake的简介 今天我们来介绍下springcloud的核心组件Eureka,Eurake是负责微服务架构中服务治理的功能,负责各个服务实例的注册与发现. Eureka包含了服务器端和客户端组件.服务器端,也被称作是服务注册中心,用于提供服务的注册与发现. 客户端组件包含服务消费者与服务生产者.在应用程序运行时,服务生产者向注册中心注册自己的服务实例,当消费者