eureka的简单介绍,eureka单节点版的实现?eureka的自我保护?eureka的AP性,和CP性?
- 注意!!!
这是对上一篇博客 springcloud的延续,整个项目的搭建,来源与上一篇博客。
一、什么是eureka?- // eureka是一个注册中心,实现了dubbo中zookeeper的效果!
- 二、实现eureka工程的搭建?
- 1.1 单节点版
- 1.1 zookeeper 和 eureka的区别?
- /*
- 1. zookeeper不会把自己注册到注册中心,但是eureka会!
- 2. 配置eureka 需要配置不能把自己注册到注册中心里面。
- 3. consumer 也不能把自己注册到注册中心。
- 4. 只要provider可以。
- */
- 1.2 创建eureka工程
- 20190926-springcloud-eureka-management(pom):只管理jar包
- 子级项目 --20190926-springcloud-eureka-7081(jar):运行了eureka
- 1.3 jar包的添加
- 所有的eureka都只会用到一个jar包
- eureka并不是springcloud公司的,是Netflix公司的产品,目前springcloud正在开发完善的springcloud架构来代替Netflix所提供的组件
- 虽然eureka的工程构建仍然需要使用springboot,但是不再需要springboot-web-starter的jar包,因为eureka的jar包中已经有了
- // !!!!!如果添加则出现jar包冲突
- eureka的jar包添加只需要在父工程中添加即可,所有的子工程都可以继承父工程的jar包
- springcloud官网中提供的springcloud2.x版本所规定的jar包格式:
- <dependencies>
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
- </dependency>
- </dependencies>
- 1.4 eureka整个开发中,不涉及任何与业务有关的代码
- /*
- application.properties
- ApplicationRun.java
- @SpringBootApplication
- @EnableEurekaServer
- */
- 1.5 把provider-8081注册进eureka中
- /*
- 在配置zookeeper的时候,无论是服务消费者还是服务生产者,都引入zookeeper的jar包(zkClinet)
- 在配置eureka的时候,需要引入么?
- !!很需要!!
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
- </dependency>
- */
- 修改application.properties配置文件
- 在讲zookeeper的时候,zk.address=zookeeper的ip地址
- 现在使用eureka的时候,也需要eureka的地址(eureka的项目地址)
- eureka.client.service-url.defaultZone=http://localhost:7081/eureka
- 在provider-8081项目的主启动类上添加注解
- @EnableDiscoveryClient:
- springcloud2.x的版本注解
- @EnableEurekaClient:
- springcloud1.x的版本注解
- 1.6 配置eureka服务的信息(actuator-info)
- // 为什么要配置?
- 虽然目前eureka注册中心中只有一个服务,但是在真实开发环境中可能有很多个(35个)
- 每一个团队/team是有多个人组成的,每一个开发人员开发的功能是不同的,
- eg:
- 电商
- cart微服务:zhangsan开发
- order微服务:lisi开发
- portal微服务:wangwu开发
- 这些微服务最终都需要注册进eureka中
- 假设zhangsan所开发的cart微服务出现问题了,这个问题是lisi发现的
- 如果其中有一个服务出现问题,这个服务正好是自己开发的,但是最终lisi看不到主要信息,直接描述不清楚,这种情况是绝对不允许在团队中出现!
- /*
- 在provider-8081项目的application.properties中进行配置
- 配置eureka的实例名(Status下面所显示的名字)
- 不允许出现任何的重复!
- eureka.instance.instance-id=虽然可以随意起,但是要求描述出整个微服务的作用
- */
- 当鼠标移动到服务名的时候,只会显示localhost,但是根据localhost并不能精准的定位到哪一台服务器,需要把localhost改为IP地址
- # 在eureka中显示IP地址
- // eureka.instance.prefer-ip-adderss=true
- 配置完毕后显示并不是本机的ip地址
- provider的ip地址显示是相对于eureka做的内网映射
- 在eureka的整个注册中心里会指定内部的ip地址,必须要使provider和eureka在同一个内网中,
- 一旦provider成功的注册进了eureka,那么eureka就会给provider分配一个自己的内网ip
- // 每一台电脑是有两个IP的,一个是公网IP,一个是内网IP
- 实现点击服务名显示具体的服务信息
- 先添加jar包
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-actuator</artifactId>
- </dependency>
- // 在provider-8081项目的application.properties配置文件中添加:
- info.author.name=Seven Lee
- info.company.name=AAA SOFTWARE EDU
- info.project.description=This is Demo
- 1.7 eureka的自我保护机制?
- 如果长时间不连接(不激活)eureka的时候,会出现自我保护机制,在eureka页面上会显示:
- EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.
- /*
- 为什么会出现自我保护:
- 有没有可能网络阻塞(网络非常卡),如果发生后,eureka就检测不到provider的心跳
- eureka中有200个provider,如果只有3个provider没有心跳,eureka就会直接把这三台直接剔除
- 但是如果有198个provider都没有心跳,则eureka就不会再剔除,也就是说直接会保留这198个provider
- */
- 1.8 什么是eureka的AP性?
- 在eureka中注册过的服务会定时向eureka发送心跳
- 当网络故障/网络延迟/服务宕机就不会再向eureka发送心跳,eureka从接不到心跳的那一秒开始算起,(90秒)之后会直接把这个服务给剔除
- 因为provider的机房停电了,大面积的provider都无法向eureka发送心跳,90秒之后还是没有接收到心跳,
- eureka就不会再剔除任何一个服务(也就是说会把全部的服务都保留下来)(这个就是eureka的AP性)
- /*
- 为什么eureka不会剔除大量的服务?
- AP:只保证了服务的可用性,不保证数据的一致性
- CP:只保证了数据的一致性,不保证服务的可用性
- 如果eureka把所有的服务全部剔除,当consumer进行访问调用的发现eureka中并没有任何服务了,整个项目都会处于瘫痪状态,整个客户端的体验就会非常差,也就是说相当于报错500!
- 如果当大面积服务都没有心跳,eureka不剔除的情况下,consumer进行访问调用的时候依然可以找到所注册服务,然后就可以直接获取到数据,这些数据可能不是最新的数据!
- */
- 1.9 如何关闭eureka的自我保护机制:
- !!可以关闭!!但是不能这么做!!
- 在eureka-7081项目的application.properties配置文件中
- // eureka.server.enable-self-preservation=false(!!关闭eureka的自我保护机制!!)
- 提示一下信息:
- THE SELF PRESERVATION MODE IS TURNED OFF. THIS MAY NOT PROTECT INSTANCE EXPIRY IN CASE OF NETWORK/OTHER PROBLEMS.
- 现在某些微服务就是不需要eureka的自我保护,就想办法把自我保护机制失效
- provider告诉eureka,我每个5秒会向你发送一次心跳,当最后一次检测我的时间之后过了8秒还没有接收到心跳直接把我剔除!
- 在eureka-7081的application.properties配置文件中添加
- # eureka自己检测服务的心跳时间(90秒)
- # 单位是毫秒,先把eureka检测心跳的时间缩短为10秒
- # 也就是说每个10秒就会检测一次服务的心跳
- // eureka.server.eviction-interval-timer-in-ms=10000
- 在provider-8081的application.properties配置文件中添加
- # 规定自己向eureka发送心跳的时间
- # 单位是秒
- // eureka.instance.lease-renewal-interval-in-seconds=5
- # 当eureka最后一次检测到心跳的时间间隔(单位是秒)
- # eg:15:05:20是最后一次检测到心跳-->检测8秒之后还是无法检测心跳的时候直接剔除
- // eureka.instance.lease-expiration-duration-in-seconds=8
- 2.集群版 (正宗的eureka!)
二、eureka项目jar包的添加,和相关配置文件?
2.1 20190927-springcloud-eureka-management父级项目的 jar包
- <?xml version="1.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <parent>
- <artifactId>20190927-springcloud-parent</artifactId>
- <groupId>com.aaa</groupId>
- <version>1.0-SNAPSHOT</version>
- </parent>
- <modelVersion>4.0.0</modelVersion>
- <groupId>com.aaa</groupId>
- <artifactId>20190927-springcloud-eureka-management</artifactId>
- <packaging>pom</packaging>
- <modules>
- <module>20190927-springcloud-eureka-7081</module>
- </modules>
- <!--
- eureka的jar包添加只需要在父工程中添加即可,所有的子工程都可以继承父工程的jar包
- springcloud官网中提供的springcloud2.x版本所规定的jar包格式:
- -->
- <dependencies>
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
- </dependency>
- </dependencies>
- </project>
2.2 把provider-8081注册进eureka中 的文件配置?
- server.port=8081
- server.servlet.context-path=/
- spring.datasource.driver-class-name=com.mysql.jdbc.Driver
- # 我的数据库编码的问题 所以需要添加 characterEncoding=utf8 设置自字符集。
- spring.datasource.url=jdbc:mysql://localhost:3306/qy100?characterEncoding=utf8&useSSL=false
- spring.datasource.username=root
- spring.datasource.password=root
- spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
- mybatis.type-aliases-package=com.aaa.zxf.model
- mybatis.mapper-locations=classpath:mapper/*Mapper.xml
- #三、
- # 配置的是在eureka中显示的服务名(Application)
- # 如果不配置,则会显示UNKNOWN(这个是细节!!,以后有问题)
- spring.application.name=user-provider
- #一、
- #配置eureka 的注册地址,将provider 注册进来。
- # 单节点模式,eureka的命名空间是 defaultZone
- # 客户端的命名空间可以随意指定,就算不一致,也可以注册进eureka 。因为单节点只有
- #一台eureka, 此时的命名空间是失效的。
- #二、 注意!
- # GreenWich RS.3:无论是单点解还是集群模式,eureka的服务器端和客户端的命名空间必要保持一致,否则会报错(找不到服务实例)
- #eureka.client.service-url.defaultZone=http://localhost:7081/eureka
- eureka.client.service-url.defaultZone=http://localhost:7081/eureka
- #四
- #在eureka中配置实例, 就是eureka的status下显示的名字
- # 不可以重复!!! 等同于mysql中表的id。
- eureka.instance.instance-id=user-provider-8081
- #五、
- #在eureka中显示ip的地址
- eureka.instance.prefer-ip-address=true
- #六 点击eureka的服务名显示出该服务的具体信息
- # 根据服务的具体内容,作者,公司,以及对整个服务的描述来进行显示
- # 相当于在HTML页面上有一个a标签<a href="/actuator/info"></a> --> 跳转到controller:@RequestMapping("/actuator/info")
- # !!开头用info!!其他的随便输入
- info.autor.name=ZhouXu
- info.company.name=AAA
- info.project.desription=This is Demo
- #七 现在某些微服务就是不需要eureka的自我保护,就想办法把自我保护机制失效
- # 规定自己向eureka发送心跳的时间 单位是秒
- eureka.instance.lease-renewal-interval-in-seconds=5
- #eureka.instance.lease-renewal-interval-in-seconds=5
- # 当eureka最后一次检测到心跳的时间间隔(单位是秒)
- # eg:15:05:20是最后一次检测到心跳-->检测8秒之后还是无法检测心跳的时候直接剔除
- eureka.instance.lease-expiration-duration-in-seconds=8
provide-8081启动类添加注解。
- package com.aaa.zxf;
- import org.mybatis.spring.annotation.MapperScan;
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
- /**
- *
- * 将provider 注册到 eureka 需要添加注解
- * @EnableDiscoveryClient
- */
- @SpringBootApplication
- @MapperScan("com.aaa.zxf.mapper")
- @EnableDiscoveryClient
- public class ApplicationRun8081 {
- public static void main(String[] args) {
- SpringApplication.run(ApplicationRun8081.class,args);
- }
- }
2.3 eureka服务的信息配置?
20190927-springcloud-eureka-7081子级项目(jar)
- <?xml version="1.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <parent>
- <artifactId>20190927-springcloud-provider-management</artifactId>
- <groupId>com.aaa</groupId>
- <version>1.0-SNAPSHOT</version>
- </parent>
- <modelVersion>4.0.0</modelVersion>
- <artifactId>20190927-springcloud-provider-8081</artifactId>
- <dependencies>
- <dependency>
- <groupId>com.aaa</groupId>
- <artifactId>20190927-springcloud-service</artifactId>
- <version>1.0-SNAPSHOT</version>
- </dependency>
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
- </dependency>
- <!--
- 实现点击服务名显示具体的服务信息的jar包
- -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-actuator</artifactId>
- </dependency>
- </dependencies>
- </project>
7081的application.properties配置。
- # 一、
- #eureka 注册中心的相关配置
- server.port=7081
- server.servlet.context-path=/
- #二、
- # eureka 服务器端的实例名称 唯一的!
- #就是给 eureka 起了一个名字。 不可乱起。
- #hostname就是本台服务器的域名,不配置就是localhost
- eureka.instance.hostname=localhost
- #三、
- # 设置eureka 不要将自己注册到注册中心里面。
- # eureka默认也会把自己注册到注册中心里,这里因为最终eureka是不需要被consumer所发现的,所以不再需要把自己注册里面,eureka自己就是注册中心
- # 它是对整个服务的管理起作用,并不是一个服务提供者,所以不应该把自己注册到注册中心里
- # 默认值为true,需要把默认值改成false
- eureka.client.register-with-eureka=false
- #四、
- # 设置eureka 不要在注册中心 发现自己
- # eureka的职责是维护服务的实例,表明自己就是注册中心,并不需要从注册中心里发现自己
- # 默认值为true,需要手动改为false
- eureka.client.fetch-registry=false
- #五、
- #1. eureka的指向地址
- # zookeeper需要在linux服务器上进行配置,最终的情况下使用zookeeper的时候必须要指向zookeeper的IP地址
- #eureka不需要做任何服务器配置,但是也必须要指向地址(直接指向eureka的项目即可:http://localhost:7081/eureka)
- #2. localhost
- # 该地址中的localhost就是eureka.instance.hostname的值,端口号就是server.port的值,/eureka:固定的(eureka自己提供)
- # defaultZone:eureka默认所提供的命名空间
- # 在eureka的注册地址中,是可以分空间(zone)的,是命名空间,根据空间的不同来配置不同集群的eureka来实现不同的作用
- # eureka不需要linux服务器,但是eureka怎么知道自己和其他的服务器是一个集群呢?
- # eg:电商项目
- # order项目-->服务的提供者和服务的消费者
- # cart项目-->服务的提供者和服务的消费者
- # item项目-->服务的提供者和服务的消费者
- # manager项目-->服务的提供者和服务的消费者
- # userInfo项目-->服务的提供者和服务的消费者
- # 就可以根据类别进行配置eureka
- # eureka01和eureka02的命名空间就是:order
- # eureka03和eureka04的命名空间就是:cart
- # 为了提供整个项目的安全性和可维护性
- #3. 单节点的配置
- # 如果为单节点可以随意配置,但是如果为集群则目前为止必须要配置成defaultZone(因为如果是集群版就必须先要声明命名空间,如果不声明则无法使用)
- eureka.client.service-url.defaultZone=http://localhost:7081/eureka
- #六
- #关闭eureka的自我保护机制:
- #!!可以关闭!!但是不能这么做!!
- #eureka.server.enable-self-preservation=false
- #七 现在某些微服务就是不需要eureka的自我保护,就想办法把自我保护机制失效
- #1. provider告诉eureka,我每个5秒会向你发送一次心跳,当最后一次检测我的时间之后过了8秒还没有接收到心跳直接把我剔除!
- #2. eureka自己检测服务的心跳时间(90秒)
- # 单位是毫秒,先把eureka检测心跳的时间缩短为10秒
- # 也就是说每个10秒就会检测一次服务的心跳
- eureka.server.eviction-interval-timer-in-ms=10000
- #eureka.server.eviction-interval-timer-in-ms=10000
7081的启动类
- package com.aaa.zxf;
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
- /**
- * 关于注解?
- * @EnableEurekaServer: 就是开启eureka的服务器端
- *
- * @EnableEurekaClient: !!!!不让用!!!!(springcloud1.x的注解)
- */
- @SpringBootApplication
- @EnableEurekaServer
- public class ApplicationRun7081 {
- public static void main(String[] args) {
- SpringApplication.run(ApplicationRun7081.class,args);
- }
- }
图解单节点
eureka的简单介绍,eureka单节点版的实现?eureka的自我保护?eureka的AP性,和CP性?的更多相关文章
- Elasticsearch源码分析 | 单节点的启动和关闭
本文主要简要介绍Elasticsearch单节点的启动和关闭流程.Elasticsearch版本:6.3.2 相关文章 1.Google Guice 快速入门 2.Elasticsearch 中的 G ...
- jmeter命令行运行-单节点
jmeter有自己的GUI页面,但是当线程数很多或者现在有很多的测试场景都是基于linux下进行压测,这时我们可以使用jmeter的命令行方式来执行测试,该篇文章介绍jmeter单节点命令运行方式. ...
- C# Redis分布式锁 - 单节点
为什么要用分布式锁? 先上一张截图,这是在浏览别人的博客时看到的. 在了解为什么要用分布式锁之前,我们应该知道到底什么是分布式锁. 锁按照不同的维度,有多种分类.比如 1.悲观锁,乐观锁; 2.公平锁 ...
- eureka server 单节点与多节点部署演示
环境搭建 目录结构(ad-eureka为子模块) --ad-spring-cloud --ad-eureka --pom.xml --pom.xml 主pom.xml <?xml version ...
- Hadoop介绍及最新稳定版Hadoop 2.4.1下载地址及单节点安装
Hadoop介绍 Hadoop是一个能对大量数据进行分布式处理的软件框架.其基本的组成包括hdfs分布式文件系统和可以运行在hdfs文件系统上的MapReduce编程模型,以及基于hdfs和MapR ...
- Spring-Cloud之Eureka注册中心环境搭建(单节点)
一 Eureka概述 服务启动时会生成服务的基本信息对象InstanceInfo,然后在启动时会register到服务治理中心. 注册完成后会从服务治理中心拉取所有的服务信息,缓存在本地. 之后服务会 ...
- 老司机实战Windows Server Docker:4 单节点Windows Docker服务器简单运维(下)
上篇中,我们主要介绍了使用docker-compose对Windows Docker单服务器进行远程管理,编译和部署镜像,并且设置容器的自动启动.但是,还有一些重要的问题没有解决,这些问题不解决,就完 ...
- 《PHP 5.5从零開始学(视频教学版)》内容简单介绍、文件夹
<PHP 5.5从零開始学(视频教学版)>当当网购买地址: http://product.dangdang.com/23586810.html <PHP 5.5从零開始学(视频教学版 ...
- 老司机实战Windows Server Docker:3 单节点Windows Docker服务器简单运维(上)
经过上两篇实战Windows Server Docker系列文章,大家对安装Windows Docker服务以及如何打包现有IIS应用为docker镜像已经有了基本认识.接下来我们来简单讲讲一些最基本 ...
随机推荐
- B. The Meeting Place Cannot Be Changed
B. The Meeting Place Cannot Be Changed time limit per test 5 seconds memory limit per test 256 megab ...
- [LeetCode]621. Task Scheduler 任务安排 题解
题目描述 给定一个char数组,代表CPU需要做的任务,包含A-Z,不用考虑顺序,每个任务能在1个单位完成.但是有规定一个非负整数n代表两个相同任务之间需要至少n个时间单位.球最少数量的时间单位完成所 ...
- 【LeetCode】712. Minimum ASCII Delete Sum for Two Strings 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- 1114. Boxes
1114. Boxes Time limit: 0.6 secondMemory limit: 64 MB N boxes are lined up in a sequence (1 ≤ N ≤ 20 ...
- 1336 - Sigma Function
1336 - Sigma Function PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB S ...
- select......for update会锁表还是锁行
select查询语句是不会加锁的,但是select .......for update除了有查询的作用外,还会加锁呢,而且它是悲观锁. 那么它加的是行锁还是表锁,这就要看是不是用了索引/主键. 没用索 ...
- CS5212 pin to pin 替代RTD2166|DP转VGA芯片|CS5212转换电路设计方法
CS5212适用于设计DP转VGA转换电路,主要用在嵌入式单片机基于工业机或者INTEL X86主板上面,也适用于多个电子配件市场和显示器应用程序,如笔记本电脑.主板.台式机.适配器.转换器和转接器. ...
- Layui的本地存储方法-Layui.data的基本使用
本地存储是对 localStorage 和 sessionStorage 的友好封装,可更方便地管理本地数据. localStorage 持久化存储:layui.data(table, setting ...
- 中文字体css编码转换
各大网站的字体选择 网站 字体 腾讯 font: 12px "宋体","Arial Narrow",HELVETICA; 淘宝 font: 12px/1.5 t ...
- Kibana_X-Pack管理Elasticsearch权限
在Kibana上面配置权限,验证对Elasticsearch权限控制, 主要步骤如下: 1.创建角色 2.创建用户,并且赋予用户角色 3.用户登陆,验证没有权限 4.赋予角色权限 5.用户登陆,验证拥 ...