每天学点SpringCloud(五):如何使用高可用的Eureka
前几篇文章我们讲了一下Eureka的基础使用,但是呢有一个很重要的问题,我们讲的都是单机版的情况,如果这个时候Eureka服务挂了的话,那么我们的服务提供者跟服务消费者岂不是都废了?服务提供者和消费者都废了的话那这个程序还有存在的意义么?
那么今天咱们就讲一讲如何解决这个问题。相信大家都知道,这个问题是我们提供高可用服务必须经历的问题。解决方案就是加集群,那么我们来看一下Eureka怎么实现集群吧。
1.首先呢,我们把原先的cloud-demo-eureka项目负责一份命名为cloud-demo-eureka-hign(高可用的服务,哈哈)
注意没有看过前几篇文章的童鞋可以在文章底部找到GitHub地址先看一下代码。
为了省事起见,我们先把security的依赖去掉。
<?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>spring-cloud-demo</artifactId>
<groupId>cn.org.zhixiang</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion> <artifactId>cloud-demo-eureka-high</artifactId> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<!--注意此处的依赖是SpringBoot2.0以后专用的,如果您使用的SpringBoot版本低于2.0请使用spring-cloud-starter-eureka-server-->
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency> </dependencies>
</project>
2.启动类只需要改一下名字其他的不变
@SpringBootApplication
@EnableEurekaServer
public class CloudDemoEureHighApplication {
public static void main(String[] args) {
SpringApplication.run(CloudDemoEureHighApplication.class, args);
}
}
3.我们现在要玩点不一样的了,此次项目我们使用了4个配置文件。它们分别是application.yml、application-dev1.yml、application-dev2.yml、application-dev3.yml。这里解释一下为什么会使用4个配置文件,如果我们在生产环境上这里其实应该是有三个程序的,但是我们为了测试方便,就使用这一个程序当成三个使用。
先看我们的application.yml文件变成什么样子了。
spring:
profiles:
active: dev1
application:
name: eureka-server-high
dev:
host: localhost
dev1Port: 8761
dev2Port: 8762
dev3Port: 8763
我们可以看到位于最上方的就是一个spring.profiles.active属性,这个属性呢,通常适用于我们不同环境下配置的切换。举个例子,我们可能有开发、测试、生产等等不同的环境,这几个环境使用的肯定不是一个数据库,如果我们每次在各个环境都要修改一下配置文件那样岂不是累死了。而spring.profiles.active属性呢,就是指定的我们的项目启动加载的配置文件,例如我们配的值为dev1,那么一会当我们启动项目的时候就会去加载application-dev1.yml文件.
紧接着就是spring.application.name了,相信大家都知道了,我们此次的应用名称就是eureka-server-high了。
下面呢其实是我自定义的一个配置,因为此次我们要使用三个Eureka服务来组成一个集群,所以我先在这里指定一下这三个服务的端口号,至于为什么在这指定相信看了下面三个配置文件你就明白了。
4.先来看一下application-dev1.yml
server:
port: ${dev.dev1Port}
eureka:
client:
service-url:
defaultZone: http://${dev.host}:${dev.dev2Port}/eureka,http://${dev.host}:${dev.dev3Port}/eureka
可以看到首先定义了端口号是上方我们在application.yml文件中定义的一个端口号8761,然后它注册的地址变成两个了,就是端口端口号为8762和8763的程序。
接着看application-dev2.yml
server:
port: ${dev.dev2Port}
eureka:
client:
service-url:
defaultZone: http://${dev.host}:${dev.dev1Port}/eureka,http://${dev.host}:${dev.dev3Port}/eureka
它注册了8761和8763的程序
那么现在我想你应该已经猜出来了application-dev3.yml是怎么写的了吧
server:
port: ${dev.dev3Port}
eureka:
client:
service-url:
defaultZone: http://${dev.host}:${dev.dev1Port}/eureka,http://${dev.host}:${dev.dev2Port}/eureka
5.配置文件搞定以后我们可以启动了。
首先我们到CloudDemoEureHighApplication类中右键run启动程序,这里你会发现两个疑点:
项目启动报错哎。哈哈,其实不用怕,报错其实是正常的,不报错才奇怪呢。你想到报错的原因了么?我们启动使用的配置文件是dev1,他启动会向端口号为8762和端口号为8763的项目注册,这两个项目都没有,所以肯定会报错。不过没关系,Eureka其实是启动成功了的,现在你打开浏览器访问以下localhost:8671其实是可以看到Eureka已经注册成功了。
还有一个疑点就是:哎,小编你上边不是说我们用一个程序模拟三个么,可是我这个启动了以后,再启动不是重启了么。我咋启动三个呀。
其实这个呢因为小编有妙招,现在我们8761已经启动了对吧,接下来跟我一步一步走

先点击这个 Edit Configuration,然后看下图

按照图片的标号,先点击加号图标,然后起个与CloudDemoEurekaHighApplication不一样的名字,这里我是加了一个-3,然后在第三个位置就是我们启动类的路径,最后一个位置就是选中要启动的模块。现在一个新的启动方式就做好了,接着我们把application.yml文件中的spring.
profiles.active改成dev3。

接着按上图顺序选中刚刚定义的启动方式,点击debugger启动。现在是不是发现dev3的程序也启动了。虽然还是保错,我想你应该知道原因了。
接着如法炮制,我们启动dev2,记住不要忘了修改application.yml。
现在三个服务都起来了,我们的集群是不是成功了呢
浏览器访问localhost:8761或者8762或者8763你是不是都看到了下图这样三个节点呢

如果你看到的是这样的一个效果,那么就恭喜你Eureka集群已经搭建成功了。
6.使用:
既然集群搭建成功了,那么就可以使用了,还记得我们如何把客户端注册的服务器上么,不记得话请抓紧时间复习一下:每天学点SpringCloud(二):服务注册与发现Eureka
当时我们注册的时候,因为没有集群所以应该是这样写的
eureka:
client:
register-with-eureka: true
service-url:
defaultZone: http://localhost:8761/eureka
你要是问我现在还这样写能行么,我告诉你可以,这样没问题,但是我不推荐。为什么呢,虽然我们现在使用的是集群,当我们的服务提供者注册上以后应该是三个节点都会有这个服务提供者,就算8761这个节点挂了也无所谓。但是,如果我们服务提供者在注册的时候8761就已经挂了,那么它是注册不上的,人家8762和8763现在是不认识它的。所以我推荐给你的写法就是:
defaultZone: http://localhost:8761/eureka,http://localhost:8762/eureka,http://localhost:8763/eureka
GitHub:https://github.com/shiyujun/spring-cloud-demo
如果对您有所帮助,请记得帮忙点一个star哦

本文出自https://zhixiang.org.cn,转载请保留。
每天学点SpringCloud(五):如何使用高可用的Eureka的更多相关文章
- 搭建高可用的Eureka注册中心
搭建高可用的Eureka注册中心 一.搭建高可用的Eureka的作用 当服务器因种种原因导致Eureka注册中心(后面简称Eureka)服务当机(服务器跪了,异常关闭停止服务).这样就会影响到整个业务 ...
- SpringCloud第二弹(高可用Eureka+Ribbon负载均衡)
先建立父工程 .. ..一路next 搭建注册中心(需要建立三个工程,端口不一样) .. .. .. 修改入口类 package com.cloud.eurekaserver1111; import ...
- MySQL入门篇(五)之高可用架构MHA
一.MHA原理 1.简介: MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Faceb ...
- 浅谈SQL Server中的事务日志(五)----日志在高可用和灾难恢复中的作用
简介 日志的作用是保证持久性和数据一致性,通过日志可以实现数据的Undo与Redo,因此通过日志,SQL Server不仅仅可以实现灾难恢复,还可以通过日志的Redo来实现高可用性.本篇文章主要讲述日 ...
- Hive扩展功能(五)--HiveServer2服务高可用
软件环境: linux系统: CentOS6.7 Hadoop版本: 2.6.5 zookeeper版本: 3.4.8 主机配置: 一共m1, m2, m3这五部机, 每部主机的用户名都为centos ...
- Spring Cloud|高可用的Eureka集群服务
Eureka,作为spring cloud的服务发现与注册中心,在整个的微服务体系中,处于核心位置.单一的eureka服务,显然不能满足高可用的实际生产环境,这就要求我们配置一个能够应对各种突发情况, ...
- 在Docker环境下部署高可用的Eureka注册中心
Eureka Server的同步遵循着一个非常简单的原则,只要有一条边将节点连接,就可以进行信息传播和同步 由于Eureka Server进行相互注册的方式来实现高可用的部署,所以我们只需要将Eure ...
- dubbo入门学习(五)-----dubbo的高可用
zookeeper宕机与dubbo直连 现象 zookeeper注册中心宕机,还可以消费dubbo暴露的服务. 原因 健壮性 l 监控中心宕掉不影响使用,只是丢失部分采样数据 l 数据库宕掉后,注册中 ...
- springcloud(五,多个服务注册中心eureka)
spring cloud (一.服务注册demo_eureka) spring cloud (二.服务注册安全demo_eureka) spring cloud (三.服务提供者demo_provid ...
随机推荐
- python requests库爬取网页小实例:ip地址查询
ip地址查询的全代码: 智力使用ip183网站进行ip地址归属地的查询,我们在查询的过程是通过构造url进行查询的,将要查询的ip地址以参数的形式添加在ip183url后面即可. #ip地址查询的全代 ...
- linux下ping命令出现ping: sendto: Network is unreachable
问题:ping外网出现: sendto: Network is unreachable 查看: #route Route命令 : 在数据包没有有效传递的情况下,可以利用route命令查看路由表 [ro ...
- APP支付(.NET版)
---恢复内容开始--- APP支付(.NET版) 一. 支付宝支付 1. 有一个支付账号,在蚂蚁金服开放平台中登录账号→选择“管理中心”→在“开发者中心”下选择“网页&移动应用”→然后按 ...
- Linux 远程工具Screen 的应用
挂断原理参考:https://www.ibm.com/developerworks/cn/linux/l-cn-screen/ 要求,python2 常用操作: 创建screen screen -L ...
- Java中String字符串常量池
首先看一个例子,通过这个例子更能快速理解String常量池 public static void main(String[] args) { String a = "ab"; St ...
- C/C++生成静态库动态库及语言交互
C++静态库与动态库(比较透彻) Go中调用C的动态库与静态库 我的示例 文件结构 |- sample |- c |- libsample |- libsample.h |- libsample.cp ...
- Python3 使用pymysql链接MySQL数据库
1,pymysql安装 pip install pymysql 2,pymysql使用 import pymysql 3,实例查询 import pymysql #获取一个数据库链接 #格式 主机地址 ...
- the default terminal(gnome-terminal) start up fail
Platform: Ubuntu 16.04 LTS Reason: variable $LANG on system is empty Solution: localectl set-locale ...
- 地磁应用中的低功耗无线数传模块xbee PRO S2C
地球上每一个地理坐标点,在一段时间内磁场强度是恒定的,当车辆这种铁磁物质经过这个点时,对这个点的磁场强度产生一个连续的扰动,通过磁传感器采样数据与初始采样数据(该点的地球磁场值)进行对比,其差值为车辆 ...
- bp代码
#电池老化率测定的神经网络模型 import tensorflow as tf import numpy as np import matplotlib.pyplot as plt import pa ...