一、euerka的基本知识

1. 服务治理

Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务治理

在传统的rpc远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,

管理比较复杂,所以需要使用服务治理,管理服务于服务之间依赖关系,

可以实现服务调用、负载均衡、容错等,实现服务发现与注册。

2. 服务注册

Eureka采用了CS的设计架构,Eureka Server 作为服务注册功能的服务器,它是服务注册中心。

而系统中的其他微服务,使用 Eureka的客户端连接到 Eureka Server并维持心跳连接。

这样系统的维护人员就可以通过 Eureka Server 来监控系统中各个微服务是否正常运行。

在服务注册与发现中,有一个注册中心。当服务器启动的时候,会把当前自己服务器的信息

比如:服务地址通讯地址等以别名方式注册到注册中心上。另一方(消费者|服务提供者),

以该别名的方式去注册中心上获取到实际的服务通讯地址,

然后再实现本地RPC调用RPC远程调用框架核心设计思想:

在于注册中心,因为使用注册中心管理每个服务与服务之间的一个依赖关系(服务治理概念)。

在任何rpc远程框架中,都会有一个注册中心(存放服务地址相关信息(接口地址))

3. Eureka包含两个组件:Eureka Server和Eureka Client

Eureka Server提供服务注册服务

各个微服务节点通过配置启动后,会在EurekaServer中进行注册,

这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,

服务节点的信息可以在界面中直观看到。

EurekaClient通过注册中心进行访问

是一个Java客户端,用于简化Eureka Server的交互,客户端同时也具备一个内置的、

使用轮询(round-robin)负载算法的负载均衡器。

在应用启动后,将会向Eureka Server发送心跳(默认周期为30秒)。

如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,

EurekaServer将会从服务注册表中把这个服务节点移除(默认90秒)

二、euerka的Server端以及单机集群的相关配置

  • 启动类

    在启动类上添加注解:

    @EnableEurekaServer  // 标明该服务是euerka的一个服务注册中心
    @SpringBootApplication(exclude = DataSourceAutoConfiguration.class) // 避免加载数据库报错
  • 配置文件:使用yml配置文件

    server:
    port: 7000 eureka:
    instance:
    hostname: eureka7000 # eureka服务端的实例名称
    client:
    register-with-eureka: false # false表示不向注册中心注册自己。
    fetch-registry: false # false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
    service-url:
    # 集群配置,指向其他euerka
    defaultZone: http://eureka7001:7001/eureka/
    # 单机配置
    # defaultZone: http://eureka7000:7000/eureka/ # server:
    # 关闭自我保护机制,保证不可用服务被及时踢除
    # enable-self-preservation: false
    # eviction-interval-timer-in-ms: 2000

三、euerka的client端以及单机集群的相关配置

  • 启动类

    @EnableEurekaClient 	// 标明将该服务注册到euerka注册中心
  • 配置文件:yml配置文件

server:
port: 8000 # 端口号 spring:
application:
name: payment # 服务名
datasource:
type: com.alibaba.druid.pool.DruidDataSource # 当前数据源操作类型
driver-class-name: org.gjt.mm.mysql.Driver # mysql驱动包
url: jdbc:mysql://127.0.0.1:3306/spring-cloud?useUnicode=true&characterEncoding=utf-8&useSSL=false
username: root # 用户名
password: root # 密码 eureka:
client:
# 表示是否将自己注册进EurekaServer默认为true。
register-with-eureka: true
# 是否从EurekaServer抓取已有的注册信息,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
fetchRegistry: true
service-url:
# 单机版
# defaultZone: http://localhost:7000/eureka
# 集群版
defaultZone: http://eureka7000:7000/eureka,http://eureka7001:7001/eureka
instance:
instance-id: payment8000 # euerka注册中心中显示的实例名
# 访问路径可以显示IP地址
prefer-ip-address: true
#Eureka客户端向服务端发送心跳的时间间隔,单位为秒(默认是30秒)
#lease-renewal-interval-in-seconds: 1
#Eureka服务端在收到最后一次心跳后等待时间上限,单位为秒(默认是90秒),超时将剔除服务
#lease-expiration-duration-in-seconds: 2 mybatis-plus:
mapperLocations: classpath:com/kl/payment/mapper/xml/*.xml # 扫描xml文件

四、euerka的自我保护机制

当某些服务发送的心跳数没有按照设定的时间间隔正常返回时,euerka会触发自我保护机制。

开启保护机制的情况下euerka不会立即将对应的服务下线,而是认为该服务可能出现了例如网络延时

这样的问题,只要在到达强制下线的时间才会将服务正式下线。

默认心跳时间:30秒一次

默认强制下线时间:90秒

  • 配置文件中的具体配置

    eureka:
    instance:
    # Eureka客户端向服务端发送心跳的时间间隔,单位为秒(默认是30秒)
    lease-renewal-interval-in-seconds: 1 # 可以根据具体场景进行修改
    # Eureka服务端在收到最后一次心跳后等待时间上限,单位为秒(默认是90秒),超时将剔除服务
    lease-expiration-duration-in-seconds: 10 # 可以根据具体场景进行修改

五、服务发现

对于注册进eureka里面的微服务,可以通过服务发现来获得该服务的信息

  • 主启动类

    @EnableDiscoveryClient    // 服务发现
  • 需要用的到controller、service直接注入

    @Autowired
    private DiscoveryClient discoveryClient;
    // 调用例子
    @GetMapping(value = "/payment/discovery")
    public Object discovery(){
    List<String> services = discoveryClient.getServices();
    for (String element : services) {
    System.out.println(element);
    } List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
    for (ServiceInstance element : instances) {
    System.out.println(element.getServiceId() + "\t" + element.getHost() + "\t" + element.getPort() + "\t"
    + element.getUri());
    }
    return this.discoveryClient;
    }

六、 actuator微服务信息完善

  • 主机名称:服务名称修改、访问信息有IP信息提示

    eureka:
    instance:
    # 服务名称
    instance-id: payment8000
    # 访问路径可以显示IP地址
    prefer-ip-address: true
  • 服务健康检查

    检查服务order

    浏览器输入 http://IP:端口号/actuator/health,显示 status : "UP" 说明服务正常

euerka总结的更多相关文章

  1. Euerka环境搭建

    机器环境 windows10,IntelliJ IDEA 配置host 单节点Eureka 一.pom文件 <?xml version="1.0" encoding=&quo ...

  2. Consul etcd ZooKeeper euerka 对比

    这里就平时经常用到的服务发现的产品进行下特性的对比,首先看下结论: Feature Consul zookeeper etcd euerka 服务健康检查 服务状态,内存,硬盘等 (弱)长连接,kee ...

  3. Refit在ASP.NET Core中的实践

    前言 声名式服务调用,己经不算是一个新鲜的话题了,毕竟都出来好些年了. 下面谈谈,最近项目中用到一个这样的组件的简单实践. 目前部分项目用到的是Refit这个组件,都是配合HttpClientFact ...

  4. 项目笔记:2018年4月(SpringCloud架构和SpringBoot框架)

    一.启动Euerka服务 1.在启动类里用@propertySource引入全局配置文件noteapp-service.properties: 如上图.左侧为某服务配置文件properties,右侧为 ...

  5. springcloud(十三):Eureka 2.X 停止开发,但注册中心还有更多选择:Consul 使用详解

    在上个月我们知道 Eureka 2.X 遇到困难停止开发了,但其实对国内的用户影响甚小,一方面国内大都使用的是 Eureka 1.X 系列,另一方面 Spring Cloud 支持很多服务发现的软件, ...

  6. 【三】Eureka服务注册与发现

    1.是什么 Eureka是Netflix的一个子模块,也是核心模块之一.Eureka是一个基于 REST 服务,用于定位服务,以实现云端中间层服务发现和故障转移.服务注册与发现对于微服务架构来说是非常 ...

  7. 凉凉了,Eureka 宣布闭源,Spring Cloud 何去何从?

    今年 Dubbo 活了,并且被 Apache 收了.同时很不幸,Spring Cloud 下的 Netflix Eureka 组件项目居然宣布闭源了.. 已经从 Dubbo 迁移至 Spring Cl ...

  8. (转)Spring Cloud(一)

    (二期)22.微服务框架spring cloud(一) [课程22]spirng c...简介.xmind54KB [课程22]spirng cl...架构.xmind0.5MB [课程22]负载均. ...

  9. 服务注册发现consul之三:服务发现比较:Consul vs Zookeeper vs Etcd vs Eureka

    这里就平时经常用到的服务发现的产品进行下特性的对比,首先看下结论: Feature Consul zookeeper etcd euerka 服务健康检查 服务状态,内存,硬盘等 (弱)长连接,kee ...

随机推荐

  1. stm32学习心得体会

    stm32作为现在嵌入式物联网单片机行业中经常要用多的技术,相信大家都有所接触,今天这篇就给大家详细的分析下有关于stm32的出口,还不是很清楚的朋友要注意看看了哦,在最后还会为大家分享有些关于stm ...

  2. 期望 概率DP

    期望 \(x\) 的期望 \(E(x)\) 表示平均情况下 \(x\) 的值. 令 \(C\) 表示常数, \(X\) 和 \(Y\) 表示两个随机变量. \(E(C)=C\) \(E(C \time ...

  3. WPF_02_XAML

    XAML(Extensible Application Markup Language的简写)是用于实例化.NET对象的标记语言.XAML对于WPF不是必须的. XAML基础 XAML标准: XAML ...

  4. python环境搭建、pycharm安装

    一.      实验目标 (1)  Python环境搭建 (2)  会pycharm安装和使用 (3)  了解python程序设计流程 二.      实验内容 1.勾选Add Python 3.7 ...

  5. Navicat15 For Mysql最新版完美破解图文教程(支持Win和Mac)

    Navicat15 For Mysql最新版完美破解 欢迎关注博主公众号[跟着Mic学架构],专注于分享Java领域技术干货,回复关键字 [面试资料] 可以获得海量面试资料. 申明,本教程 Navic ...

  6. Redis6.2发布 地理位置功能增强了什么?

    原文地址:https://developer.aliyun.com/article/780257 Redis社区最近刚刚发布Redis6.2 RC1版本,在本次发布中,阿里云Tair团队(阿里云云内存 ...

  7. 动手写一个简单的Web框架(HelloWorld的实现)

    动手写一个简单的Web框架(HelloWorld的实现) 关于python的wsgi问题可以看这篇博客 我就不具体阐述了,简单来说,wsgi标准需要我们提供一个可以被调用的python程序,可以实函数 ...

  8. 【Mysql】表锁 行锁 记录锁 间隙锁

    Mysql中的锁 基于锁的属性分类:共享锁.排他锁. 基于锁的状态分类:意向共享锁.意向排它锁 根据锁的粒度分类:全局锁.页锁.表级锁.行锁(记录锁.间隙锁.和临键锁),实际上的锁就这些,上面两种分类 ...

  9. Python 中的反转字符串:reversed()、切片等

    摘要:以相反的顺序反转和处理字符串可能是编程中的一项常见任务.Python 提供了一组工具和技术,可以帮助您快速有效地执行字符串反转. 本文分享自华为云社区<Python 中的反转字符串:rev ...

  10. python3下tomorow模块 @thread报语法错误def async(n, base_type, timeout=None): ^ SyntaxError: invalid syntax---解决方法

    遇见问题:python使用tomorrow实现多线程,tomorrow模块的源代码报语法错误? 这是报错信息:Traceback (most recent call last):  File &quo ...