Spring Cloud Eureka 集群搭建 - 以及发现一个 “直觉BUG”

首先解释一下标题所说的“直觉BUG”,这个是我自己的定义。就是我们直觉上认为这是一个BUG,是一个错误,而实际并没有出错。

比如下图:

虽然出现报错信息,但是,整个程序并没有出错。至于原因,图片上的文字已经很好的解释了。

在此,再简单的说一下。

出现这种情况的原因是,我们的程序已经启动(已经出现红框中此条日志,代表程序已经启动,所以程序本身没有问题。),为什么会出现错误呢?

是因为在此系统中,我们要搭建的是集群环境, 每一台服务器在自己启动之后,都要去连接集群中的其他服务器,以便于相互之间通讯传递信息。

但是,我们肯定是按照次序启动服务器,我们不管先启动哪一台服务器,其他的服务器都还没有准备就绪,所以肯定会出现找不到要连接的服务器,所以会报错。

这个错误根本不需要解决, 把所有的服务器全部启动,整个集群就可以正常运行(因为出现的是连接错误,现在所有的服务器已经准备就绪,所以不会再一次出现连接错误,除非某台服务器down掉。)。

 

下面我们看一下SpringCloudEureka集群的搭建过程:

1、首先创建项目结构:(使用SpringBoot 1.5.10)

 

2、在启动程序类头部加入注

package com.thunisoft.thunisoftregister;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@EnableEurekaServer
@SpringBootApplication
public class ThunisoftRegisterApplication {

	public static void main(String[] args) {
		SpringApplication.run(ThunisoftRegisterApplication.class, args);
	}
}

 

3、编写配置文件

spring:
  application:
    name: spring-cloud-eureka
  profiles: peer1
server:
  port: 8000
eureka:
  instance:
    hostname: peer1
  client:
    serviceUrl:
      defaultZone: http://peer2:8001/eureka/,http://peer3:8002/eureka/
    fetch-registry: true
    register-with-eureka: true
---
spring:
  application:
    name: spring-cloud-eureka
  profiles: peer2
server:
  port: 8001
eureka:
  instance:
    hostname: peer2
  client:
    serviceUrl:
      defaultZone: http://peer1:8000/eureka/,http://peer3:8002/eureka/
    fetch-registry: true
    register-with-eureka: true
---
spring:
  application:
    name: spring-cloud-eureka
  profiles: peer3
server:
  port: 8002
eureka:
  instance:
    hostname: peer3
  client:
    serviceUrl:
      defaultZone: http://peer1:8000/eureka/,http://peer2:8001/eureka/
    fetch-registry: true
    register-with-eureka: true

  以上配置中标红的代码段很重要,在此进行说明:

  1、fetch-registry:表示是否从eureka server获取注册信息,如果是单一节点,不需要同步其他eureka server节点,则可以设置为false,但此处为集群,应该设置为true,默认为true,可不设置。

  2、register-with-eureka:表示是否将自己注册到eureka server,因为要构建集群环境,需要将自己注册到及群众,所以应该开启。默认为true,可不显式设置。

    

4、因为实在一台机器上实验,所以修改host文件(windows系统下、C:\Windows\System32\drivers\etc)

127.0.0.1       peer1
127.0.0.1       peer2
127.0.0.1       peer3

  增加如上三段

 

5、启动注册中心服务

5.1、可以使用IDEA进行启动

按照这个步骤添加三个启动节点,注意: program arguments 参数依次更改为 peer2 、peer3,与配置文件中的 spring.application.files 参数值对应。

之后全部启动。

 

5.2、打包成jar之后,使用 java -jar命令启动

使用maven插件或gradl插件等等构件工具,将程序打包为jar。然后执行以下命令

java -jar 生成的jar包名称.jar --spring.profiles.active=peer1
java -jar 生成的jar包名称.jar --spring.profiles.active=peer2
java -jar 生成的jar包名称.jar --spring.profiles.active=peer3

 

注意: 以上两种启动方式均可以将集群启动,但是有一个问题要注意,就是上面提到“直觉BUG”问题。详细参考上面。

 

6、查看集群效果

posted @ 2018-03-12 15:34  GordonDicaprio  阅读(23585)  评论(0编辑  收藏  举报