微服务架构实战学习(五):Eureka Server

从此篇开始,进入 Spring Cloud 的实际开发阶段,我会按照简易的微服务架构图中的各组件部分来开始一步步搭建一个微服务架构的系统。

微服务简易架构图

一、Spring Cloud Eureka

在 Spring Cloud 中,注册与发现服务的组件对应的就是 Spring Cloud Eureka。

1.1 什么是 Eureka

Eureka is a REST (Representational State Transfer) based service that is primarily >used in the AWS cloud for locating services for the purpose of load balancing and >failover of middle-tier servers.

Eureka github 上的原话如是说:Eureka 是一个 REST 风格的基础服务,它被用于 AWS 云上来定位服务,以实现对中间层服务的负载均衡和灾备处理。(这里的中间层服务就对应于微服务简易架构图中的后端通用服务)

Spring Cloud Eureka 是 Spring Cloud Netflix 下的一个组件,是基于 Netflix Eureka 的二次封装。Netflix 不是卖视频的吗?没错,是他。

但估计是他们天天卖视频太无聊,所以他们的攻城狮就开发并开源了这个组件(戏多...)。eureka 这个单词翻译成中文就是 "找到了,有了" 的意思。怎么样,那些攻城狮取名字的时候是不是非常的简单粗暴而又非常的应景呢。

Netflix Eureka 的 github 源码地址:

https://github.com/Netflix/eureka

1.2 Eureka 的组件

Spring Cloud Eureka 由于两部分组件组成:

  • Eureka Server 注册中心
  • Eureka Client 服务注册

Eureka Server 是提供 "服务" 注册功能的服务端,提供 "服务" 注册与发现功能。
而其他需要注册的 "服务",则使用 Eureka Client 连接到 Eureka Server中,实现 "服务" 的注册。并通过心跳连接来实现对注册的各服务的状态的监控。

Eureka Server 就好比是一个点餐平台,它已经为我们实现了买家和卖家的注册管理功能,并且还具备管理买家与卖家的信息的功能。比如,卖家是否在线、提供哪些货物等等。

二、开发 Eureka Server

2.1 开发环境

  • Windows 10
  • JDK 1.8.0_151
  • IDEA 2017.2
  • Maven 3.5

2.2 创建项目

File -> New -> Project... -> Spring Initializr


新建项目

填写项目信息,包括 group 和 artifact (group 可设置为一个唯一域名的倒置,而 artifact 则对应开发的组件的名称)。"Next"


填写项目信息

选择如下的各组件,并 Next。


选择组件

注:此处的 Spring Boot 直接选择默认,这里的 2.0.2 会生成到项目里的 pom.xml 中。

填写项目名称及项目路径,并 Finish


填写项目名称及项目路径

项目结构如下


项目结构如下

这里我们不使用 maven wrapper 插件,因此删除 .mvn、mvnw、mvnw.cmd 这几个文件。(maven wrapper 的功能此处不赘述,如有兴趣请百度)

我们基于 SpringBoot 的第一个 Eureka Server 项目到这里就创建完成了,你是不是已经急忙地想要让程序跑起来了?别急...

2.3 项目配置

1 版本配置

打开 pom.xml 文件,我们可以看到如下Spring Cloud 及 Spring Boot 版本信息

Spring Cloud 及 Spring Boot 版本

我们创建项目的时候,选择的是 SpringBoot 2.0.2,这里的 pom.xml 文件中就生成的 2.0.2.RElEASE 的 SringBoot 版本。

关于 Spring Cloud 及 Spring Boot 版本,是有一定的对应关系的,具体的对应关系请参考如下地址

https://projects.spring.io/spring-cloud/
Spring Cloud 及 Spring Boot 版本对应

从上面的版本对应表中,我们可以看到 Spring Cloud Netflix 组件 (Eureka 的父组件) 的 Finchley.RC2 版本对应的版本号是 2.0.0.RC2,对应的是 SpringBoot 的 2.0.2.RELEASE 版本。

再看下面两行小字,SpringCloud 官方说了,Finchley 版本使用的是 Spring Boot 2.0.x 运行,不能使用 Spring Boot 1.5.x,也就是说 Finchley 是兼容 Spring Boot 2.0.x 版本的,所以我们填写 2.0.0 也完全没有问题。

对照我们的 pom.xml 一看,是歪打正着了吗?那还配置个鬼呀。不,如果你不想要使用我这个环境,这些版本呢,例如:

我要使用 Edgware.SR3 进行开发,怎么办?

很简单,将 pom.xml 文件中的 properties 下的 spring-cloud.version 属性值改为 Edgware.SR3,相应的,把 parent 下的 version 版本改为 1.5.10.RELEASE 即可。


使用不同版本

配置好了之后,就可以使用 maven 对依赖进行解析下载了,这可能需要一点时间,如果你感觉下载实在太慢,可以添加国内的 aliyun 的 maven 仓库:

<repository>
    <id>aliyunmaven</id>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</repository>
添加repository

然后就等待 maven 下载吧,下载好了大概如下:


依赖管理

小 tips:如何出现上图中的边栏按钮呢?
View -> Tool Buttons ->右键 Maven Projects -> Move to -> Left 即可在左侧边栏查和使用 maven 工具了

2 项目配置

处理好了依赖,下一步,我们就是要将我们的项目跑起来了。打开我们的项目

Project -> eureka -> src -> main -> java -> com.jiangzhuolin.eureka
Project -> eureka -> src -> main -> resources

可以看到我们创建的项目已经自动生成了如下两个文件,其中 EurekaApplacation 是项目的入口文件,而 application.properties 则是项目的配置文件。


生成的文件
  • 添加 @EnableEurekaServer 注解
    默认创建的 EurekaApplication 类中没有添加 @EnableEurekaServer,也就没有 EurekaServer 的功能。因此,第一步就是为其添加一个 @EnableEurekaServer,然后这个项目就是一个 EurekaServer 项目,具备了 EurekaServer 的服务注册与发现功能。

怎么样?惊不惊喜,意不意外,完全不用写一行功能代码就实现了一个注册中心。

package com.jiangzhuolin.eureka;

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

@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args);
    }
}
  • 配置服务信息

有人可能会疑惑,我们的项目不是已经取名叫 eureka 了吗?还是配置服务名称是什么鬼?

这就好比,某人搞了一个淘宝的项目,但它的公司名称叫阿里巴巴一样。这个比喻不一定正确和准确,大概理解就行。

我们先将 application.properties 改为 application.yml ,.yml 是新发展出来的标记语言,在此不赘述,反正就是简洁好用、可移置性强...

参考下方内容,配置了 服务名称,服务端口,eureka 的注册服务 URL。

spring:
  application:
    name: eureka

server:
  port: 8000

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8000/eureka/

至此,我们的 Eureka Server 就创建及配置完成了

三、运行

此处只介绍项目的本地运行的方式,构建部署会在以后统一介绍。

右击 EurekaApplication -> Run 'EurekaApplication ' 即可启动

项目启动日志

注,如果启动日志中有类似如下的错,不如惊慌, eureka server 会把自己也当作一个 client 端,想要找一个 server 端进入注册,而 eureka server 与 eureka client 采用心跳连接,也就是间隔一段时间连接一次,所以在这个间隙中会有报错。

com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server

在浏览器中输入 http://localhost:8000 即可进入 Eureka 控制台,我们可以看到服务的基本信息,以及可以看到已经注册的服务。eureka server 已经把它自己也注册到当前的注册中心了。

控制台

如果不想让 eureka server 注册到自己的注册中心,只需要在配置文件中加上 register-with-eureka: false 即可

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8000/eureka/
    register-with-eureka: false

四、总结

至此,我们的 Eureka Server 就搭建完全并运行起来了,更多关于 Eureka 相关知识可访问如下网址:

https://cloud.spring.io/spring-cloud-netflix/

接下来,将开始 Eureka Client 的学习之旅。

五、附录

如果有的小伙伴问,我不喜欢用 IDEA,我就希望用 Eclipse,难道就不能用 Eclipse 开发 Spring Cloud 项目了吗?当然不是

比如你使用 Eclipse 作为 IDE,使用 maven 作为构建工具。那么你直接创建一个 maven 的空白项目,然后在 pom.xml 中添加依赖信息。然后添加一个启动入口类,加上注解,最后配置好项目的名称,端口等信息即可。在此不作赘述,如下列出 pom.xml 信息( pom.xml 配置官方也有,传送门

本文代码: https://github.com/jiangzhuolin/eureka-server-simple

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

推荐阅读更多精彩内容