一 服务注册中心

1 什么是服务注册中心

服务注册中心是服务实现服务化管理的核心组件,类似于目录服务的作用,主要用来 存储服

务信息,譬如提供者 url 串、路由信息等。服务注册中心是 SOA 架构中最基础的设 施之一。

2 服务注册中心的作用

1,服务的注册

2,服务的发现 党成员注册成功后,所有的成员都可以发现

3 常见的注册中心有哪些

1,Dubbo 的注册中心 Zookeeper

2,Sringcloud 的注册中心 Eureka

4 服务注册中心解决了什么问题

1. 服务管理

2. 服务的依赖关系管理

5 什么是 Eureka 注册中心

Eureka 是 Netflix 开发的服务发现组件,本身是一个基于 REST 的服务。Spring Cloud 将它集成在其子项目 spring-cloud-netflix 中,以实现 Spring Cloud 的服务注册于发现,同时 还提供了负载均衡、故障转移等能力

6 Eureka 注册中心三种角色

6.1EurekaServer

通过 Register、Get、Renew 等接口提供服务的注册和发现。

6.2ApplicationService(ServiceProvider)

服务提供方 把自身的服务实例注册到 Eureka Server 中

6.3ApplicationClient(ServiceConsumer)

服务调用方 通过 EurekaServer 获取服务列表,消费服务。

二 搭建高可用的服务注册中心

1 搭建注册中心

1.1 创建项目

1.2 配置文件

#设置 eureka 实例名称,与配置文件的变量为主 eureka.instance.hostname=eureka2

#设置服务注册中心地址,指向另一个注册中心 eureka.client.serviceUrl.defaultZone=http://eureka1:8761/eu reka/

在搭建 Eureka 集群时,需要添加多个配置文件,并且使用 SpringBoot 的多环境配置方 式。集群中需要多少节点就添加多少个配置文件。

1.3 在配置文件中配置集群节点

1.3.1eureka1

spring.application.name=eureka-server
server.port=8080#设置 eureka 实例名称,与配置文件的变量为主
eureka.instance.hostname=eureka1
#设置服务注册中心地址,指向另一个注册中心
eureka.client.serviceUrl.defaultZone=http://eureka2:9090/eureka/

1.3.2 eurake2

spring.application.name=eureka-server
server.port=9090#设置 eureka 实例名称,与配置文件的变量为主
eureka.instance.hostname=eureka2
#设置服务注册中心地址,指向另一个注册中心
eureka.client.serviceUrl.defaultZone=http://eureka1:8080/eureka/

1.5 Eureka 集群部署

部署环境:需要安装 jdk1.8,正确配置环境变量。 注意:需要关闭 linux 的防火墙,或者是开放 8761 端口

1.5.1将项目打包

Maveninstall

1。5.2上传实例

在/usr/local/创建一个 eureka 的目录 将项目的 jar 包拷贝到/usr/local/eureka

6 编写一个启动脚本文件

#!/bin/bashcd `dirname $0`CUR_SHELL_DIR=`pwd`
CUR_SHELL_NAME=`basename ${BASH_SOURCE}`JAR_NAME="springcloud-eureka-server-cluster-0.0.1-SNAPSHOT.jar"
JAR_PATH=$CUR_SHELL_DIR/$JAR_NAME#JAVA_MEM_OPTS=" -server -Xms1024m -Xmx1024m -XX:PermSize=128m"
JAVA_MEM_OPTS=""SPRING_PROFILES_ACTIV="-Dspring.profiles.active=eureka2"
#SPRING_PROFILES_ACTIV=""
LOG_DIR=$CUR_SHELL_DIR/logs
LOG_PATH=$LOG_DIR/${JAR_NAME%..logecho_help()
{echo -e "syntax: sh $CUR_SHELL_NAME start|stop"
}if [ -z $1 ];thenecho_helpexit 1
fiif [ ! -d "$LOG_DIR" ];thenmkdir "$LOG_DIR"
fiif [ ! -f "$LOG_PATH" ];thentouch "$LOG_DIR"
fiif [ "$1" == "start" ];then# check serverPIDS=`ps --no-heading -C java -f --width 1000 | grep $JAR_NAME | awk '{print $2}'`if [ -n "$PIDS" ]; thenecho -e "ERROR: The $JAR_NAME already started and the PID is ${PIDS}."exit 1fiecho "Starting the $JAR_NAME..."# startnohup java $JAVA_MEM_OPTS -jar $SPRING_PROFILES_ACTIV $JAR_PATH >> $LOG_PATH 2>&1 &COUNT=0while [ $COUNT -lt 1 ]; dosleep 1COUNT=`ps  --no-heading -C java -f --width 1000 | grep "$JAR_NAME" | awk '{print $2}' | wc -l`if [ $COUNT -gt 0 ]; thenbreakfidonePIDS=`ps  --no-heading -C java -f --width 1000 | grep "$JAR_NAME" | awk '{print $2}'`echo "${JAR_NAME} Started and the PID is ${PIDS}."echo "You can check the log file in ${LOG_PATH} for details."elif [ "$1" == "stop" ];thenPIDS=`ps --no-heading -C java -f --width 1000 | grep $JAR_NAME | awk '{print $2}'`if [ -z "$PIDS" ]; thenecho "ERROR:The $JAR_NAME does not started!"exit 1fiecho -e "Stopping the $JAR_NAME..."for PID in $PIDS; dokill $PID > /dev/null 2>&1doneCOUNT=0while [ $COUNT -lt 1 ]; dosleep 1COUNT=1for PID in $PIDS ; doPID_EXIST=`ps --no-heading -p $PID`if [ -n "$PID_EXIST" ]; thenCOUNT=0breakfidonedoneecho -e "${JAR_NAME} Stopped and the PID is ${PIDS}."
elseecho_helpexit 1
fi

1.6.1设置启动脚本的运行权限

Chmod-R755server.sh

1.7 修改 linux 的 host 文件

Vim /etc/hosts

192.168.70.134 eureka1

192.168.70.135 eureka2

1.8 启动 eureka 注册中心

./server.shstart 启动 ./server.shstop 停止

1.9 通过浏览器访问注册中心的管理页面

2 构建provider服务

2.1 创建项目,修改pom文件

<dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Dalston.SR5</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><!-- Spring Boot启动器 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- web启动器 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>

2.2 修改配置文件

spring.application.name=eureka-rpovider
server.port=8090#设置服务注册中心地址,指向另一个注册中心
eureka.client.serviceUrl.defaultZone=http://eureka1:8080/eureka/,http://eureka2:9090/eureka/

2.3 修改启动类

/@EnableEurekaClient
@SpringBootApplication
public class Star {public static void main(String[] args) {SpringApplication.run(Star.class, args);}
}

4 修改windows的hosts文件

192.168.106.140 eureka1

192.168.106.140 eureka2

3 consumer服务

1 创建项目,修改pom文件

<dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Dalston.SR5</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><!-- Spring Boot启动器 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- web启动器 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>

2 修改配置文件

spring.application.name=eureka-consumer
server.port=8091#设置服务注册中心地址,指向另一个注册中心
eureka.client.serviceUrl.defaultZone=http://eureka1:8080/eureka/,http://eureka2:9090/eureka/

3 再service完成服务的调用

/@Service
public class UserService {@Autowiredprivate LoadBalancerClient loadBalancerClient;public List<Users> userList(){//选择调用的服务的名称 //ServiceInstance 封装了服务的基本信息,如 IP,端口ServiceInstance choose = this.loadBalancerClient.choose("eureka-rpovider");//拼接访问服务的urlStringBuffer sb = new StringBuffer();sb.append("http://").append(choose.getHost()).append(":").append(choose.getPort()).append("/user");//springMVC RestTemplateRestTemplate rt = new RestTemplate();ParameterizedTypeReference<List<Users>> param = new ParameterizedTypeReference<List<Users>>() {};ResponseEntity<List<Users>> exchange = rt.exchange(sb.toString(),HttpMethod.GET,null, param);return exchange.getBody();}
}

4 编写controller

/@RestController
public class UserController {@Autowiredprivate UserService userService;@RequestMapping("/consumer")public List<Users> user() {return this.userService.userList();}
}

5 编写启动类

/@EnableEurekaClient
@SpringBootApplication
public class Star {public static void main(String[] args) {SpringApplication.run(Star.class, args);}
}

6 访问服务

三 Eureka架构图原理

1 Eurake原理图

Register(服务注册):把自己的 IP 和端口注册给 Eureka。 Renew(服务续约):发送心跳包,每 30 秒发送一次。

告诉 Eureka 自己还活着。

Cancel(服务下线):当 provider 关闭时会向 Eureka 发送消息,把自己从服务列表中删除。防 止 consumer 调用到不存在的服务。 GetRegistry(获取服务注册列表):获取其他服务列表。

Replicate(集群中数据同步):eureka 集群中的数据复制与同步。

MakeRemoteCall(远程调用):完成服务的远程调用。

2 CAP定理

基于分布式 CAP 定理,分析注册中心两大主流框架:Eureka 与 Zookeeper 的区别

1 什么是 CAP 原则

CAP 原则又称 CAP 定理,指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。 CAP 由 Eric Brewer 在 2000 年 PODC 会议上提出。该猜想在提出两年后被证明成 立,成为我们熟知的 CAP 定理

四 优雅停服

1 Eureka的自我保护

1 什么情况下Eureka会启动自我保护

1,自我保护的条件 一般情况下,微服务在 Eureka 上注册后,会每 30 秒发送心跳包,Eureka 通过心跳来 判断服务时候健康,

同时会定期删除超过 90 秒没有发送心跳服务。

2,有两种情况会导致 Eureka Server 收不到微服务的心跳

a.是微服务自身的原因

b.是微服务与 Eureka 之间的网络故障 通常(微服务的自身的故障关闭)只会导致个别服务出现故障,一般不会出现大面积故 障

,而(网络故障)通常会导致 Eureka Server 在短时间内无法收到大批心跳。考虑到这个区别,Eureka 设置了一个阀值,

当判断挂掉的服务的数量超过阀值时, Eureka Server 认为很大程度上出现了网络故障,将不再删除心跳过期的服务。

3,那么这个阀值是多少呢? 15 分钟之内是否低于 85%; Eureka Server 在运行期间,会统计心跳失败的比例在 15 分钟内是否 低于 85% 这种算法叫做 Eureka Server 的自我保护模式。

2 为什么要启用自我保护

1,因为同时保留"好数据"与"坏数据"总比丢掉任何数据要更好,当网络故障恢复后, 这个 Eureka 节点会退出"自我保护模式"。

2,Eureka 还有客户端缓存功能(也就是微服务的缓存功能)。即便 Eureka 集群中所有节点都宕机失效,

微服务的 Provider 和 Consumer 都能正常通信。

3,微服务的负载均衡策略会自动剔除死亡的微服务节点。

3 如何关闭自我保护

#关闭自我保护:true 为开启自我保护,false 为关闭自我保护
eureka.server.enableSelfPreservation=false
#清理间隔(单位:毫秒,默认是 60*1000)
eureka.server.eviction.interval-timer-in-ms=60000

4 服务的优雅停服

4.1不需要再 EurekaServer 中配置关闭自我保护

4.2需要再服务中添加 actuator.jar 包 再provider中添加

<dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Dalston.SR5</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><!-- Spring Boot启动器 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- web启动器 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka-server</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>

4.3 修改配置文件

#启用 shutdown endpoints.shutdown.enabled=true
#禁用密码验证 endpoints.shutdown.sensitive=false

4.4 发送一个关闭服务的url请求,使用HttpClient工具

public static void main(String[] args) {//需要优雅停服的服务的ip地址 String url ="http://127.0.0.1:9090/shutdown"; //该 url 必须要使用 dopost 方式来发送,不能用浏览器发送,因为浏览器的地址栏发送的都是get请求,没有效果 HttpClientUtil.doPost(url); }

五 Eureka的安全认证

1 在 EurekaServer 中添加 security 包

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-security</artifactId>

</dependency>

2 修改 EurekaServer 配置文件

这时无论是往服务中心注册还是调用服务中心都是要验证的

#开启 http basic 的安全认证

security.basic.enabled=true security.user.name=user security.user.password=123456

3 修改访问集群节点的url

eureka.client.serviceUrl.defaultZone=http://user:123456@eur eka2:8761/eureka/

4 修改微服务的配置文件添加访问注册中心的用户名与密码

spring.application.name=eureka-provider server.port=9090
#设置服务注册中心地址,指向另一个注册中心
eureka.client.serviceUrl.defaultZone=http://user:123456@eur eka1:8761/eureka/,http://user:123456@eureka2:8761/eureka/
#启用
shutdown endpoints.shutdown.enabled=true
#禁用密码验证
endpoints.shutdown.sensitive=false

eureka管理界面是多少_Eureka注册中心相关推荐

  1. 为什么Eureka比ZooKeeper更适合做注册中心?

    来源:https://www.cnblogs.com/jieqing/p/8394001.html 刚开始看到Eureka这个单词的时候真心不会念,查了后发现他有一个好听的名字,来,大家一起念 [ j ...

  2. 1.1.Eureka【集群】服务注册中心

    注册中心基础详解 一:搭建Eureka 服务注册中心(单机版) 新建module service-center pom.xml <?xml version="1.0" enc ...

  3. Eureka服务注册中心---SpringCloud

    Eureka服务注册中心 5.1 什么是Eureka Netflix在涉及Eureka时,遵循的就是API原则. Eureka是Netflix的有个子模块,也是核心模块之一.Eureka是基于REST ...

  4. SpringCloud系列(一)、服务注册中心Eureka基础

    启动Eureka服务注册中心 1.微服务的注册中心 1.1.注册中心的主要作用 1.2.常见的注册中心 1.3.常见注册中心的异同点 2.Eureka概述 2.1.Eureka的基础知识 2.2.Eu ...

  5. SpringCloud系列之服务注册中心(Eureka)

    文章目录 0.前言 1.搭建第一个Eureka服务 ①.简介 ②.组成 ③.创建Eureka Server模块 ④.编写POM ⑤.YML ⑥.主启动 ⑦.测试 2.注册服务 ①服务提供者 Ⅰ.添加依 ...

  6. Spring Cloud -Eureka 注册中心配置

    Spring Cloud简介 1.简介 Spring Cloud是Spring旗下的项目之一,官网地址:http://projects.spring.io/spring-cloud/ Spring最擅 ...

  7. eureka java_SpringCloud注册中心Eureka

    本篇概论 在上一篇中我们介绍了微服务相关的内容.微服务的本质就是让服务与服务之间进行互相调用.那么在调用之前需要有一个前提.就是不同的服务与服务之间怎么知道彼此的存在的呢?因为服务都是独立部署的,根本 ...

  8. Eureka服务注册与发现:什么是服务注册与发现,Server注册中心

    Eureka服务注册与发现 一套微服务架构的系统由很多单一职责的服务单元组成,而每个服务单元又有众多运行实例.例如,世界上最大的收费视频网站Netflix的系统是由600多个服务单元构成的,运行实例的 ...

  9. eureka 之前的服务如何关闭_干货分享 | 服务注册中心Spring Cloud Eureka部分源码分析...

    友情提示:全文13000多文字,预计阅读时间10-15分钟 Spring Cloud Eureka作为常用的服务注册中心,我们有必要去了解其内在实现机制,这样出现问题的时候我们可以快速去定位问题.当我 ...

最新文章

  1. python怎么判断一个文件是否存在-python怎么判断一个目录下是否存在某个文件??谢啦!...
  2. 终极指南:如何使用Visual Studio Code进行 Java 开发?
  3. osgi 如何引入包_OSGi Testsuite:引入类名过滤器
  4. java并发库之Executors常用的创建ExecutorService的几个方法说明
  5. asp.net下载的方法1
  6. GreenPlum数据库调研及架构介绍
  7. excel报表管理系统mysql_比较电子表格软件Excel与数据库管理系统的优缺点
  8. 算法精解-C语言描述 递归和尾递归 (图解+实例)
  9. java爬虫爬取京东_java爬虫练习|爬取京东上的手机商品数据
  10. TF-IDF算法总结
  11. 安装CentOS7.6
  12. RFID区域实时定位系统
  13. 文字转语音合成器哪个好?这些文字转语音软件值得收藏
  14. 营造平安 信息化使公交事业更加人性化
  15. 用python做一个表白软件手机版_用python写一个5.20的表白小程序吧
  16. 查询表空间建立表空间和删除表空间
  17. 苍蝇也有自己的“领空”吗?
  18. PS,AI各类设计页面大小
  19. pyqt-窗口最大化
  20. QT3D学习之路03

热门文章

  1. Oracle 中国研发中心裁员已成定局,云时代下一个是谁?
  2. (活动)MySQL DBA之路 | 性能配置调优篇
  3. 5步带你掌握工作流Activiti框架的使用
  4. 测试用例又双叒叕失败了,NLP帮你
  5. 基于RNN和CTC的语音识别模型,探索语境偏移解决之道
  6. 云小课 | 玩转HiLens Studio之快速订购HiLens Studio版本
  7. 云小课 | 大数据融合分析:GaussDW(DWS)轻松导入MRS-Hive数据源
  8. 关于服务发现和负载均衡,你想知道的都在这儿
  9. JAVA设计一个电视机类_漫谈Java程序设计中的接口应用
  10. clickhouse hadoop_ClickHouse如何实现存算分离?