SpringCloud-Eureka

Springcloud封装了Netfix公司开发的Eureka来实现服务治理。在传统的RPC框架中,管理每个服务和服务之间依赖关系比较复杂,所以需要使用服务治理,管理服务之间的依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册。
Eureka作为服务注册中心,是利用心跳检测与客户端端保持联系。
Eureka有自我保护机制,某个时刻微服务不可用了,Eureka不会立刻清理,依旧会对该微服务的信息进行保存,为什么不即时清理呢?当网络发生分区故障,例如延时、卡顿、拥挤,Eureka心跳检测通信会出现异常,但实际上微服务是存活,所以自我保护主要是用来解决这个问题。它的设计哲学就是宁可保留错误的服务注册信息,也不盲目注销任何可能健康的服务实例。
接下来描述如何新建Eureka工程及其相关配置,事先说明Eureka2.0此时已经停更了,但是Eureka1.0还是在维护的,但由于SpringCloud已经升级到2.0的版本了,所以只能用Eureka2.0,一般生产环境也不会有太大问题的。
父工程的pom文件相关配置如下:

<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<maven.compiler.source>1.8</maven.compiler.source>

<maven.compiler.target>1.8</maven.compiler.target>

<junit.version>4.12</junit.version>

<log4j.version>1.2.17</log4j.version>

<mysql.version>8.0.16</mysql.version>

<druid.version>1.1.16</druid.version>

<mybatis.spring.boot.version>1.3.1</mybatis.spring.boot.version>

<maven.test.skip>true</maven.test.skip><!--跳过测试且不会生成class -->

</properties>

<!-- 子模块继承后,提供作用:锁定版本+子<u>modlue</u>不用写groupId和version -->

<dependencyManagement>

<dependencies>

<!-- <u>springcloud</u>的版本要和<u>springboot</u>对上才行 -->

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-dependencies</artifactId>

<version>Hoxton.SR3</version>

<type>pom</type>

<scope>import</scope>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-dependencies</artifactId>

<version>2.2.5.RELEASE</version>

<type>pom</type>

<scope>import</scope>

</dependency>

<dependency>

<groupId>com.alibaba.cloud</groupId>

<artifactId>spring-cloud-alibaba-dependencies</artifactId>

<version>2.2.1.RELEASE</version>

<type>pom</type>

<scope>import</scope>

</dependency>

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>${mysql.version}</version>

</dependency>

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>druid-spring-boot-starter</artifactId>

<version>${druid.version}</version>

</dependency>

<dependency>

<groupId>org.mybatis.spring.boot</groupId>

<artifactId>mybatis-spring-boot-starter</artifactId>

<version>${mybatis.spring.boot.version}</version>

</dependency>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>${junit.version}</version>

</dependency>

<dependency>

<groupId>log4j</groupId>

<artifactId>log4j</artifactId>

<version>${log4j.version}</version>

</dependency>

</dependencies>

</dependencyManagement>

然后新建一个Maven Module,其父工程的配置已经介绍了,这个Module作为Eureka工程,其pom配置如下(注意这里新建的是Maven Module,而不是Maven Project):

<dependencies>

<dependency>

<groupId>com.springcloud</groupId>

<artifactId>cloud-api-common</artifactId>

<version>${project.version}</version>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-actuator</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-test</artifactId>

</dependency>

</dependencies>

然后在启动类上要加两个注解:

@SpringBootApplication

@EnableEurekaServer

public class EurekaProject01{

public static void main(String[] args) {

SpringApplication.run(EurekaProject01.class, args);
}
}

然后配置yml文件:

server:
  port: 12001
eureka:
  instance:
    hostname: eureka01.com #eureka服务器的实例名称,可以写localhost,写域名的记得修改hosts文件
  client: 
    #false表示不向注册中心注册自己
    register-with-eureka: false
    #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
    fetch-registry: false  
    service-url:
      #设置与Eureka server交互的地址查询服务和注册服务都需要依赖这个地址
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
   #这段是集群的配置,要接下下面的eureka02来阐述
   #defaultZone: http://eureka02.com:12002/eureka/

按照上诉相关配置到这里应该就可以启动一个eureka服务端了,接下来介绍eureka集群配置,按照上诉步骤新建一个eureka工程,例如为eureka02.com,pom文件和启动类上诉已经描述过了,其yml配置如下

 server:
  port: 12002
eureka:
  instance:
    hostname: eureka02.com #eureka服务器的实例名称,可以写localhost,写域名的记得修改hosts文件
  client:  
    #false表示不向注册中心注册自己
    register-with-eureka: false
    #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
    fetch-registry: false  
    service-url:
    #eureka02的配置要指向eureka01,同样的eureka01的这个配置也要指向01
    defaultZone: http://eureka01.com:12001/eureka/

到这里把两个工程一起启动应该就OK了。
然后再新建一个Maven Module,配置yml的eureka模块如下:

eureka:
  instace:
    instance-id: testProject
  client:
    #注册进eurekaServer
    register-with-eureka: true
    #是否从eurekaServer抓取已有的注册信息,默认为true,单节点无所谓,集群必须设置为true才能配合Ribbon使用负载均衡
    fetch-registry: true
service-url:
  #这是单机配置
      #defaultZone: http://localhost:7001/eureka
#这是集群配置
  defaultZone: http://eureka01.com:12001/eureka, http://eureka02.com:12002/eureka

一开始还有介绍Eureka的自我保护机制,这个机制是可以取消的,但我个人感觉还是不取消的好,因为默认情况下是90秒没接到心跳才会删除,网络中是存在拥塞等异常情况,给服务点缓冲时间还是OK的。当然非要修改也是可以的。这里给个链接,有需要的同学可以自行查阅:
https://www.jianshu.com/p/cb7fa0aa47a8

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,009评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,808评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,891评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,283评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,285评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,409评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,809评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,487评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,680评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,499评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,548评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,268评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,815评论 3 304
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,872评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,102评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,683评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,253评论 2 341