Eureka服务治理

下面请听第一个话题,母。。。咳咳,拿错书了。

Eureka简介

eureka是什么呢?

简单来说呢,当我的微服务应用多了起来,一个一个写死再程序里是件很不优雅的事情,而且同一服务可能会多个实例存在,来对服务分流,就是负载均衡。

所以,我们需要一个位置来存放服务的访问列表,以供消费端来使用,这个东西呢,就可以用eureka来实现。

我们来看一下eureka的相关概念:

  • ​ 相关概念

    • 服务注册(Register)

      eureka客户端向Eureka服务器注册时,它提供自身的元数据,比如IP地址,端口信息

    • 服务续约(Renew)

      客户端每隔30秒发送一次心跳来进行服务续约。

    • 服务下线(Cancel)

      客户端在程序关闭时向服务器发送取消请求,成功该实例将会从服务器注册列表中删除

    • 服务剔除(Eviction)

      默认情况下,当客户端连续90秒没有发送心跳请求,服务器就会将该服务实例从服务列表中删除,剔除该服务

    • 获取服务注册列表信息(Fetch Registriers)

      客户端从服务器获取服务注册列表信息,并将其缓存在本地。列表信息定期(30秒)更新一次。

不太理解也没关系,我们可以先把架子搭建起来,之后慢慢悟把。

Eureka角色

Eureka中存在三种角色,注册中心,服务提供者,服务消费者。

其中注册中心是Eureka服务端,服务提供者与服务消费者都是客户端。

  • 注册中心服务器

    主要进行,服务注册,服务续约和服务下线。就是维护服务列表的东东啦。

    让我们一步一步的开始把

    • 相关依赖
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
    • 启动类配置,使用@EnableEurekaServer注解,启用Eureka服务
    @SpringBootApplication
    @EnableEurekaServer
    public class EurekacenteralApplication {
    public static void main(String[] args) {
    SpringApplication.run(EurekacenteralApplication.class, args);
    } }
    • 属性配置
    server:
    port: 9090 ##UI界面端口
    eureka:
    instance:
    hostname: localhost ##主机名称
    client:
    register-with-eureka: false ##是否注册到服务中心,因为本身就是服务中心,不需要注册
    fetch-registry: false ##是否发现服务
    service-url: ##注册中心服务地址
    defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

    启动服务,这样一个简单的注册中心就启动起来,浏览器访问http://localhost:9090 就可以看到eureka的监控界面了。

  • 服务提供者

    eureka客户端,向外提供服务

    • 相关依赖,作为Euraka客户端
     <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    • 启动类配置,使用@EnableEurekaClient注解,启动Eureka客户端
    @SpringBootApplication
    @EnableEurekaClient
    public class App {
    public static void main(String[] args) {
    SpringApplication.run(App.class,args);
    }
    }
    • 属性配置(单机时可以通过设置不同端口,来启动多个服务)
    server:
    port: 8080
    eureka:
    instance:
    prefer-ip-address: true ##使用IP注册服务
    client:
    register-with-eureka: true #默认就是true,可以不用设置
    fetch-registry: true #默认是true,可以不用设置
    service-url:
    defaultZone: http://localhost:9090/eureka/
    spring:
    application:
    name: microservice-provider
    • 服务接口
    @RestController
    @RequestMapping("/")
    public class TestController { @GetMapping("hi/{name}")
    public String hi(@PathVariable String name, HttpServletRequest request){ return "hi,welcome "+name+" from port:"+request.getServerPort();
    }
    }
  • 服务消费者

    本质上与提供者为同一类客户端,会在本地缓存一份服务列表信息,会定期更新缓存

    • 相关依赖
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    • 启动类配置
    @SpringBootApplication
    public class App { public static void main(String[] args) {
    SpringApplication.run(App.class,args);
    }
    @Bean
    public RestTemplate getRestTemplate(){
    return new RestTemplate();
    }
    }
    • 属性配置
    server:
    port: 8090
    eureka:
    client:
    service-url:
    defaultZone: http://localhost:9090/eureka/
    register-with-eureka: false ##仅仅作为消费者
    fetch-registry: true #默认是true,可以不用设置 ## 多说几句,服务者跟消费者不是绝对的,他们可以同时作为两种角色存在
    ## register-with-eureka: true
    ## fetch-registry: true
    ## 当这两个熟悉都为true的时候,就可以作为两种角色同时存在了,即可以作为提供者,向外提供服务
    ## 又可以作为消费者,消费服务
    • 服务消费,都在代码里,我干了,你随意。
    @RestController
    @RequestMapping("/")
    public class TestController { // 服务只有一个实例运行的时候,一个服务提供者,
    // 就算不注册到eureka,我们也可以使用这种方式就行调用
    @Resource
    RestTemplate restTemplate;
    @GetMapping("hi")
    public String hi() {
    return restTemplate.getForObject("http://localhost:8090/hi/consumer", String.class);
    } //当服务有多个实例的时候,我们就可以使用服务发现或获取服务列表,并取其中一个实例进行调用
    // 这样才是实际场景,当然还用更简洁的使用方式,我们下次说
    @Resource
    DiscoveryClient discoveryClient;
    //通过服务发现,获取注册中心上注册的服务,获取调用地址,然后调用服务
    @GetMapping("hi2")
    public String hi2() {
    List<ServiceInstance> serviceInstances = discoveryClient
    .getInstances("microservice-provider");
    if (serviceInstances.size() == 0) return "service has down";
    // 这里就是取第一个服务来消费
    return restTemplate.getForObject(String.format("%s/hi/consumer", serviceInstances.get(0).getUri()),
    String.class);
    }
    }

springcloud超简单的入门2--Eureka服务治理的更多相关文章

  1. SpringCloud超简单的入门(1)--一些简单的介绍

    简介 简单来说,springcloud的就是由一组springboot应用(服务)组成,相互之间通过REST等方式进行通信. 两个springboot应用,其中一个作为服务提供者,一个作为服务消费者, ...

  2. springcloud超简单的入门3--负载均衡

    上个文章的末尾说到,当有多个服务实例的时候,怎样来获取服务实例.但是,只是简单的通过get(0)来获取列表中的第一个实例来使用. 现实场景中,还需要写一个算法来实现负载均衡来决定每次使用的服务实例,而 ...

  3. 1 Spring Cloud Eureka服务治理

    注:此随笔为读书笔记.<Spring Cloud微服务实战> 什么是微服务? 微服务是将一个原本独立的系统拆分成若干个小型服务(一般按照功能模块拆分),这些小型服务都在各自独立的进程中运行 ...

  4. 1 Spring Cloud Eureka服务治理(上)

    注:此随笔为读书笔记.<Spring Cloud微服务实战>,想学习Spring Cloud的同伴们可以去看看此书,里面对源码有详细的解读. 什么是微服务? 微服务是将一个原本独立的系统拆 ...

  5. SpringCloud微服务实战——第三章服务治理

    Spring Cloud Eureka 服务治理 是微服务架构中最核心最基本的模块.用于实现各个微服务实例的自动化注册与发现. 服务注册: 在服务治理框架中,都会构建一个注册中心,每个服务单元向注册中 ...

  6. Spring cloud Eureka 服务治理(注册服务提供者)

    搭建完成服务注册中心,下一步可以创建服务提供者并向注册中心注册服务. 接下来我们创建Spring Boot 应用将其加入Eureka服务治理体系中去. 直接使用签名章节创建hello服务项目改造: 1 ...

  7. SpringCloud初体验:一、Eureka 服务的注册与发现

    Eureka :云端服务发现,一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移. Eureka 可以大致理解为 房产中介 和 房东 的关系,房东想让租客租房子,首先要把房子 ...

  8. Spring Cloud 入门教程 - Eureka服务注册与发现

    简介 在微服务中,服务注册与发现对管理各个微服务子系统起着关键作用.随着系统水平扩展的越来越多,系统拆分为微服务的数量也会相应增加,那么管理和获取这些微服务的URL就会变得十分棘手,如果我们每新加一个 ...

  9. 微服务之SpringCloud实战(二):SpringCloud Eureka服务治理

    服务治理 SpringCloud Eureka是SpringCloud Netflix微服务套件的一部分,它基于Netflix Eureka做了二次封装,主要完成微服务的服务治理功能,SpringCl ...

随机推荐

  1. Flink 源码解析 —— 深度解析 Flink 是如何管理好内存的?

    前言 如今,许多用于分析大型数据集的开源系统都是用 Java 或者是基于 JVM 的编程语言实现的.最着名的例子是 Apache Hadoop,还有较新的框架,如 Apache Spark.Apach ...

  2. react-navigation报错

    用react-navigation配置路由时,出现如下报错或白屏. 我的代码原来是 import {AppRegistry} from 'react-native'; import App from ...

  3. 把Python项目打包成exe文件

    我们很多时候,写好的程序需要打包成.exe文件才可以发给客户,那么今天我就来谈一谈,如何将一个写好的Python程序打包成exe文件! 首先,我们我们使用到的工具是python 3.7 和 Pyins ...

  4. 重读《学习JavaScript数据结构与算法-第三版》-第2章 ECMAScript与TypeScript概述

    定场诗 八月中秋白露,路上行人凄凉: 小桥流水桂花香,日夜千思万想. 心中不得宁静,清早览罢文章, 十年寒苦在书房,方显才高志广. 前言 洛伊安妮·格罗纳女士所著的<学习JavaScript数据 ...

  5. Node.js爬虫实战 - 爬你喜欢的

    前言 今天没有什么前言,就是想分享些关于爬虫的技术,任性.来吧,各位客官,里边请... 开篇第一问:爬虫是什么嘞? 首先咱们说哈,爬虫不是"虫子",姑凉们不要害怕. 爬虫 - 一种 ...

  6. .NET中使用WebService,以及和一般处理程序、类库的区别

    首先我们来看一下如何创建Web Service 首先在解决方案中新建项,选择ASP.NETWeb应用程序 然后选择一个空的项目就可以,单击确定 项目建完之后,在项目上右键-->添加-->新 ...

  7. 敏捷社区--敏捷与OKR

    携程敏捷总动员是由携程技术管理中心(PMO)发起的敏捷项目管理线下主题沙龙活动(每2月一次),旨在和研发管理同行分享互联网行业第一线的优秀敏捷实践.     5月10日携程敏捷总动员-OKR专场活动, ...

  8. ansible之数据提取与Juniper实例演示

    一.Ansible列表两种表达方式 基于YAML的列表 my_list: - a - b - c - d 基于Json格式的列表 {"my_list":[ "a" ...

  9. Asp.NetCore源码学习[1-2]:配置[Option]

    Asp.NetCore源码学习[1-2]:配置[Option] 在上一篇文章中,我们知道了可以通过IConfiguration访问到注入的ConfigurationRoot,但是这样只能通过索引器IC ...

  10. Kafka集群环境配置

    Kafka集群环境配置 1 环境准备 1.1 集群规划 Node02 Node03 Node04 zk zk zk kafka kafka kafka 1.2 jar包下载 安装包:kafka_2.1 ...