注意!!!   
  这是对上一篇博客 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性?的更多相关文章

  1. Elasticsearch源码分析 | 单节点的启动和关闭

    本文主要简要介绍Elasticsearch单节点的启动和关闭流程.Elasticsearch版本:6.3.2 相关文章 1.Google Guice 快速入门 2.Elasticsearch 中的 G ...

  2. jmeter命令行运行-单节点

    jmeter有自己的GUI页面,但是当线程数很多或者现在有很多的测试场景都是基于linux下进行压测,这时我们可以使用jmeter的命令行方式来执行测试,该篇文章介绍jmeter单节点命令运行方式. ...

  3. C# Redis分布式锁 - 单节点

    为什么要用分布式锁? 先上一张截图,这是在浏览别人的博客时看到的. 在了解为什么要用分布式锁之前,我们应该知道到底什么是分布式锁. 锁按照不同的维度,有多种分类.比如 1.悲观锁,乐观锁; 2.公平锁 ...

  4. eureka server 单节点与多节点部署演示

    环境搭建 目录结构(ad-eureka为子模块) --ad-spring-cloud --ad-eureka --pom.xml --pom.xml 主pom.xml <?xml version ...

  5. Hadoop介绍及最新稳定版Hadoop 2.4.1下载地址及单节点安装

     Hadoop介绍 Hadoop是一个能对大量数据进行分布式处理的软件框架.其基本的组成包括hdfs分布式文件系统和可以运行在hdfs文件系统上的MapReduce编程模型,以及基于hdfs和MapR ...

  6. Spring-Cloud之Eureka注册中心环境搭建(单节点)

    一 Eureka概述 服务启动时会生成服务的基本信息对象InstanceInfo,然后在启动时会register到服务治理中心. 注册完成后会从服务治理中心拉取所有的服务信息,缓存在本地. 之后服务会 ...

  7. 老司机实战Windows Server Docker:4 单节点Windows Docker服务器简单运维(下)

    上篇中,我们主要介绍了使用docker-compose对Windows Docker单服务器进行远程管理,编译和部署镜像,并且设置容器的自动启动.但是,还有一些重要的问题没有解决,这些问题不解决,就完 ...

  8. 《PHP 5.5从零開始学(视频教学版)》内容简单介绍、文件夹

    <PHP 5.5从零開始学(视频教学版)>当当网购买地址: http://product.dangdang.com/23586810.html <PHP 5.5从零開始学(视频教学版 ...

  9. 老司机实战Windows Server Docker:3 单节点Windows Docker服务器简单运维(上)

    经过上两篇实战Windows Server Docker系列文章,大家对安装Windows Docker服务以及如何打包现有IIS应用为docker镜像已经有了基本认识.接下来我们来简单讲讲一些最基本 ...

随机推荐

  1. 【LeetCode】640. Solve the Equation 解题报告(Python)

    [LeetCode]640. Solve the Equation 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: ht ...

  2. hdu 4704 Sum(组合,费马小定理,快速幂)

    题目链接http://acm.hdu.edu.cn/showproblem.php?pid=4704: 这个题很刁是不是,一点都不6,为什么数据范围要开这么大,把我吓哭了,我kao......说笑的, ...

  3. 【LeetCode】673. Number of Longest Increasing Subsequence 解题报告(Python)

    [LeetCode]673. Number of Longest Increasing Subsequence 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https:/ ...

  4. .NET Core 实现动态代理做AOP(面向切面编程)

    1.介绍 1.1 动态代理作用 用动态代理可以做AOP(面向切面编程),进行无入侵式实现自己的扩展业务,调用者和被调用者之间的解耦,提高代码的灵活性和可扩展性,比如:日志记录.性能统计.安全控制.事务 ...

  5. SpringMVC 五大组件

    DispatcherServlet HandleMapping Controller ModeAndView ViewResolver 1.DispatcherServlet 这个控件是SpringM ...

  6. Chapter 12 IP Weighting and Marginal Structural Model

    目录 12.1 The causal question 12.2 Estimating IP weights via modeling 12.3 Stabilized IP weights 12.4 ...

  7. 漫谈grpc 3:从实践到原理,带你参透 gRPC

    ​ 原文链接:万字长文 | 从实践到原理,带你参透 gRPC 大家好,我是煎鱼. gRPC 在 Go 语言中大放异彩,越来越多的小伙伴在使用,最近也在公司安利了一波,希望这一篇文章能带你一览 gRPC ...

  8. C++多线程并发---异步编程

    线程同步主要是为了解决对共享数据的竞争访问问题,所以线程同步主要是对共享数据的访问同步化(按照既定的先后次序,一个访问需要阻塞等待前一个访问完成后才能开始).这篇文章谈到的异步编程主要是针对任务或线程 ...

  9. Capstone CS5265规格书|CS5265参数|TYPEC转HDMI音视频转换拓展坞芯片

    一.CS5265总概 Capstone CS5265 USB Type-C到HDMI转换器结合了USB Type-C输入接口和数字高清多媒体接口(HDMI)输出.嵌入式微控制器(MCU)基于工业标准8 ...

  10. sping练习,在Eclipse搭建的Spring开发环境中,使用工厂方式创建Bean对象,将创建的Bean对象输出到控制台。

    相关 知识 >>> 相关 练习 >>> 实现要求: 在Eclipse搭建的Spring开发环境中,使用工厂方式创建Bean对象,将创建的Bean对象输出到控制台.要 ...