首先解释一下标题所说的“直觉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@SpringBootApplicationpublic class ThunisoftRegisterApplication { public static void main(String[] args) { SpringApplication.run(ThunisoftRegisterApplication.class, args); }}
3、编写配置文件
spring: application: name: spring-cloud-eureka profiles: peer1server: port: 8000eureka: 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: peer2server: port: 8001eureka: 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: peer3server: port: 8002eureka: 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 peer1127.0.0.1 peer2127.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=peer1java -jar 生成的jar包名称.jar --spring.profiles.active=peer2java -jar 生成的jar包名称.jar --spring.profiles.active=peer3
注意: 以上两种启动方式均可以将集群启动,但是有一个问题要注意,就是上面提到“直觉BUG”问题。详细参考上面。
6、查看集群效果