天天学点SpringCloud(五):如何使用高可用的Eureka

 

前几篇文章咱们讲了一下Eureka的基础使用,可是呢有一个很重要的问题,咱们讲的都是单机版的状况,若是这个时候Eureka服务挂了的话,那么咱们的服务提供者跟服务消费者岂不是都废了?服务提供者和消费者都废了的话那这个程序还有存在的意义么?php

 

那么今天我们就讲一讲如何解决这个问题。相信你们都知道,这个问题是咱们提供高可用服务必须经历的问题。解决方案就是加集群,那么咱们来看一下Eureka怎么实现集群吧。java

 

1.首先呢,咱们把原先的cloud-demo-eureka项目负责一份命名为cloud-demo-eureka-hign(高可用的服务,哈哈)git

注意没有看过前几篇文章的童鞋能够在文章底部找到GitHub地址先看一下代码。github

为了省事起见,咱们先把security的依赖去掉。spring

 

<?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个配置文件,若是咱们在生产环境上这里其实应该是有三个程序的,可是咱们为了测试方便,就使用这一个程序当成三个使用。apache

先看咱们的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了。app

 

下面呢实际上是我自定义的一个配置,由于这次咱们要使用三个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,转载请保留。

相关文章
相关标签/搜索