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,分布式,微服务。 

posted @ 2020-01-15 14:32  盲目的拾荒者  阅读(645)  评论(0编辑  收藏  举报