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、查看集群效果

Spring Cloud Eureka 集群搭建 - 以及发现一个 “直觉BUG”的更多相关文章
- Spring Cloud Eureka集群配置及注意事项(Greenwich版本)
Spring Cloud Eureka集群配置及注意事项(Greenwich版本) 一·概述 Spring Cloud Netflix Eureka 是一个提供服务注册与发现的套件.服务提供者只需要将 ...
- Spring Cloud Eureka集群部署到Linux环境
还是三板斧:先改配置文件,支持集群,然后出包,上传到linux环境(3个节点),最后启动jar包跑起来. 1.在原eureka服务端代码(参见Greenwich.SR2版本的Spring Cloud ...
- docker-compose 完整打包发布, 多服务,多节点SPRING CLOUD ,EUREKA 集群
这里不再使用 端口映射的方式,因为不同主机上,Feign 根据 docker hostname访问会有问题. 把打包的好jar copy到docker镜像里 有几个服务,就复制几个dockerfile ...
- Spring Cloud Eureka集群 动态扩展新节点
场景描述: Eureka的集群节点有两个,互相注册形成集群,已经支持动态刷新(不知道怎么让Eureka支持动态刷新的可以参考http://www.cnblogs.com/flying607/p/845 ...
- Spring Cloud Eureka 实现服务注册与发现
微服务 是一种架构模式,跟具体的语言实现无关,微服务架构将业务逻辑分散到了各个服务当中,服务间通过网络层进行通信共同协作:这样一个应用就可以划分为多个服务单独来维护发布.构建一个可靠微服务系统是需要具 ...
- SpringCloud学习之—Eureka集群搭建
Eureka集群的搭建 上次说过了在SpringCloud应用中使用Eureka注册中心,用来对服务提供者进行服务注册与发现,但同时,它也是一个"微服务",单个应用使用空间有限,因 ...
- 微服务架构:Eureka集群搭建
版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! 服务注册.发现是微服务架构的关键原理之一,由于微服务架构是由一系列职责单一的细粒度服务构成的网状结构,服务之间通过轻量机制进行通信,这就必 ...
- Eureka集群搭建
服务注册.发现是微服务架构的关键原理之一,由于微服务架构是由一系列职责单一的细粒度服务构成的网状结构,服务之间通过轻量机制进行通信,这就必然引入一个服务注册发现的问题,也就是说服务提供方要注册报告服务 ...
- Spring cloud Eureka 服务治理(搭建服务注册中心)
服务之类是微服务架构中最为核心的基础模块,它主要用来实现各个微服务实例的自动化注册和发现. 1. 服务注册 在服务治理框架中,通常会构建一个注册中心,每个服务单元向注册中心登记自己提供的服务,将主机. ...
随机推荐
- 谈谈MySQL的黑暗语法
[MySQL在SQL标准下实现了自己的一套SQL语句] 每种数据库都会在继承标准SQL的基础上有所发展,比如SQL-SERVER在这个基础之上发展出来的SQL“方言”就叫“T-SQL”,MySQL 发 ...
- Android 控件: Webview 的一些知识点
WebView 加载网页,当点击返回键的时,会显示上一个页面,并刷新. 同时可以对返回上一个页面进行干预,就是用到了缓存. webview加载网页的几个模式,即websetting中设置的加载模式.w ...
- JAVA与C++,C与C++的差别
首先来分析JAVA与C++的差别: JAVA是纯面向对象的语言,而C++是基于面向对象过程的语言. JAVA有着垃圾回收机制.它的语法是C++的子集,即JAVA有的C++都有.而C++有的JAVA不全 ...
- 数据库的硬迁移和mysql 5.5.38源码安装
场景:一台服务器出现了故障,需要把数据库迁移到另一台服务器上,由于数据效大,直接压缩数库的数据目录(在数据库DOWN的情况下)数据库版本mysql 5.5.38安装方式:源码安装思路:在另一台服务器上 ...
- angular学习笔记(三十)-指令(7)-compile和link(3)
本篇接着上一篇来讲解当指令中带有template(templateUrl)时,compile和link的执行顺序: 把上一个例子的代码再进行一些修改: 1.将level-two指令改成具有templa ...
- [Windows Azure] Windows Azure Storage & SQL Database
http://channel9.msdn.com/Series/Windows-Azure-Storage-SQL-Database-Tutorials Windows Azure offers mu ...
- 九个问题从入门到熟悉HTTPS
九个问题从入门到熟悉HTTPS Q1: 什么是 HTTPS? LHQ: HTTPS 是安全的 HTTP HTTP 协议中的内容都是明文传输,HTTPS 的目的是将这些内容加密,确保信息传输安全.最后一 ...
- HBase写入性能改造(续)--MemStore、flush、compact参数调优及压缩卡的使用【转】
首先续上篇测试: 经过上一篇文章中对代码及参数的修改,Hbase的写入性能在不开Hlog的情况下从3~4万提高到了11万左右. 本篇主要介绍参数调整的方法,在HDFS上加上压缩卡,最后能达到的写入 ...
- django中使用POST方法 获取POST数据
在django中获取post数据,首先要规定post发送的数据类型是什么. 1.获取POST中表单键值数据 如果要在django的POST方法中获取表单数据,则在客户端使用JavaScript发送PO ...
- spring IOC 模拟实现
IOC即inverse of control 控制反转 以前对象之间的引用是通过new来调用实现,有了Spring IOC,我们可以把对象之间的引用交给他来管理,这样就把控制权交给了Spring,所以 ...