zoukankan      html  css  js  c++  java
  • 4.Spring-Cloud-Eureka构建双节点服务注册中心集群

       注册中心这么关键的服务,如果是单点话,遇到故障就是毁灭性的。在一个分布式系统中,服务注册中心是最重要的基础部分,理应随时处于可以提供服务的状态。为了维持其可用性,使用集群是很好的解决方案。 

       Eureka Server的设计一开始就考虑了高可用问题,在Eureka的服务治理设计中,所有的结点即是服务的提供方,也是消费方,服务注册中心也不列外之前设计的让注册中心不注册自己。如下配置

       eureka.client.register-with-eureka=false

       eureka.client.fetch-registry=false

        Eureka Server的高可用实际就是将自己作为服务向其他服务注册中心注册自己,这样就形成了一组互相注册的注册中心,以实现服务清单的相互同步

    新建项目:

    1.pom.xml

    <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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>1.spring-cloud-eureka-server</groupId>
    <artifactId>spring-cloud</artifactId>
    <packaging>jar</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-cloud-eureka-server-double-node</name>
    <url>http://maven.apache.org</url>
    <!--springboot采用1.5.x 对应springcloud版本为 Dalston -->
    <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.2.RELEASE</version>
    <relativePath />
    </parent>
    
    <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <spring-cloud.version>Dalston.RELEASE</spring-cloud.version>
    </properties>
    
         <dependencies>
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka-server</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
    </dependency>
    </dependencies>
    <dependencyManagement>
    <dependencies>
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-dependencies</artifactId>
    <version>${spring-cloud.version}</version>
    <type>pom</type>
    <scope>import</scope>
    </dependency>
    </dependencies>
    </dependencyManagement>
    <build>
    <plugins>
    <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
    </plugins>
    </build>
    </project>

    2.、创建application-testhost.properties,作为testhost服务中心的配置,并将serviceUrl指向testhost2

    spring.application.name=eureka-server
    server.port=8000
    #C盘 ->  Windows -> System32 -> drives -> etc -> hosts文件
    #配置主机
    eureka.instance.hostname=testhost
    eureka.client.serviceUrl.defaultZone=http://testhost2:8001/eureka/

    3.、创建application-testhost2.properties,作为testhost2服务中心的配置,并将serviceUrl指向testhost1

    spring.application.name=eureka-server
    server.port=8001
    #C盘 ->  Windows -> System32 -> drives -> etc -> hosts文件
    #配置主机
    eureka.instance.hostname=testhost2
    eureka.client.serviceUrl.defaultZone=http://testhost:8000/eureka/

    4.主机名的配置注释中已经写明了。

    127.0.0.1 testhost
    
    127.0.0.1 testhost2

    5.启动类

    package com.niugang;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
    @SpringBootApplication
    @EnableEurekaServer
    public class SpringCloudEurekaApplication {
    public static void main(String[] args) {
    SpringApplication.run(SpringCloudEurekaApplication.class, args);
    }
    }
     

    6.打成jar包

    1.先查看pom.xml中  <packaging>jar</packaging>是为jar

    2.在eclipse中右键项目-->Run as --->Run configurations中main的tab栏中的goals填写package这样就打成jar包了如果失败,右键项目-->maven-->update project然后在重新打包.

    7.运行

    一次执行以下命令,如果执行中报错参考http://blog.csdn.net/niugang0920/article/details/79573134

    java -jar spring-cloud-0.0.1-SNAPSHOT.jar --spring.profiles.active=testhost

    没有启动第二条命令,效果如上图

    java -jar spring-cloud-0.0.1-SNAPSHOT.jar --spring.profiles.active=testhost2

    启动第二条命令,刷新浏览器结果为上图。

    8.修改服务提供方配置文件,将注册中心改成配置的testhost,testhost2

    #指定微服务的名称后续在调用的时候只需要使用该名称就可以进行服务的访问
    spring.application.name=eureka-client
    server.port=8081
    eureka.instance.hostname=testhost
    #注册中心地址
    eureka.client.serviceUrl.defaultZone=http://testhost:8000/eureka/,http://testhost2:8001/eureka/

    启动服务提供方。

    刷新:http://testhost:8000/ 可知服务提供方已经注册到testhost中了

    刷新:http://testhost2:8001/ 可知服务提供方已经注册到testhost2中了

    ​此时断开testhost2,注册在testhost上的eureka-client服务还行访问,这样就实现了注册中心的高可用了。

    如果不想使用主机名来定义注册中心的地址,也可以使用ip地址的形式,需要配置文件中增加
    eureka.instance.prefer-ip-address=true

                                                                                   微信公众号: 

                                                   

                                                                                 JAVA程序猿成长之路

                              分享资源,记录程序猿成长点滴。专注于Java,Spring,SpringBoot,SpringCloud,分布式,微服务。 

  • 相关阅读:
    前端攻城狮学习笔记九:让你彻底弄清offset
    JavaScript中Element与Node的区别,children与childNodes的区别
    JavaScript代码优化实战之一:缓存变量,关键字过滤
    【转】纯CSS画的基本图形(矩形、圆形、三角形、多边形、爱心、八卦等),NB么
    包装对象——JavaScript中原始类型拥有属性的原因
    关于两个容积不同的瓶子中装水可以得到哪些精确值的问题的算法
    JavaScript中判断鼠标按键(event.button)
    累了休息一会儿吧——分享一个JavaScript版扫雷游戏
    用CSS让未知高度内容垂直方向居中
    空间换时间,把递归的时间复杂度降低到O(2n)
  • 原文地址:https://www.cnblogs.com/niugang0920/p/12196549.html
Copyright © 2011-2022 走看看