spring cloud 学习笔记(Ⅰ):Eureka服务器的配置

  • 系统环境:win10 + java8 + spring boot 2.1.3.RELEASE + spring cloud Greenwich.RELEASE

注意:版本不一致的情况下可能需要的依赖会有细微差别,具体需要根据官网文档进行配置依赖

  • IDE: eclipse
  • 配置服务器的过程不多赘述(本文比较精简),主要的配置项将会连同注释一并在代码块中贴出
建立主工程

推荐通过 https://start.spring.io/ 来配置自己的maven工程,配置完毕后将下载的压缩包解压导入即可完成初始的spring boot项目

建立各种微服务工程

同样通过 https://start.spring.io/ 来配置自己的微服务工程,根据自己需要配置多个微服务工程。如下图:

start.spring.io

在Dependencies中可以搜索并且添加需要的基础依赖包。

spring cloud工程的配置

这里推荐使用yaml文件进行配置文件的配置。
具体配置将会在下文中的代码块中贴出。

搭建微服务集群

集群简而言之就是很多的微服务所形成的服务群,所有的微服务应该注册在注册中心中,spring全家桶提供了Eureka来作为我们的注册中心,Eureka注册中心可以同时为微服务客户端和微服务服务器两个角色。如果我们将两个Eureka服务器相互注册,那么我们就拥有了一个高可用的微服务注册中心,所谓高可用,就是当一个微服务down掉之后,另一个微服务继续正常工作,从而防止整个网站down掉。

创建注册中心需要我们在pom.xml中引入Eureka相关的包:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

在初期我们创建工程的时候在选择依赖(Dependencies)的时候就可以将需要的包引入,这里不再赘述。

作为服务器,我们需要在启动类上加入相关注解:

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

@SpringBootApplication
@EnableEurekaServer
public class ServiceServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ServiceServerApplication.class, args);
    }

}

@EnableEurekaServer注解声明了这是一个Eureka服务器,可以作为注册中心使用。当然只配置注解是不够的,我们也需要在application.yaml配置文件中配置注册中心:

spring:
  application:
    name: service-server  #上下(多个实例的情况下)的spring.application.name必须一致,这里的application.name同时也是配置文件映射的name (在注册中心中显示的name)
  profiles: server-8888
server:
  port: 8888                        #服务管理中心端口
eureka:
  client:
    #是否将自己注册到Eureka Server上,默认为true
    #register-with-eureka: false     #(单节点时设置false)防止将自己当作客户端去注册从而引发Cannot execute request on any known server 问题 
    #fetch-registry: false           #同上
    service-url:  #注册中心的url,后续的微服务都要注册到这个url上
      defaultZone: http://server-9999:9999/eureka/  #默认使用8761端口,需要手动覆盖成自己的,注意url中需要加端口,查询服务和注册服务都需要依赖这个地址。这里注册的是9999的实例,因为服务器本身也是个客户端,在有多个服务器节点的情况下,可以相互注册,相互注册的注册中心会将对方注册在中心的所有微服务拷贝到自己的注册中心下,实现高可用。这里有两个节点,所以可以直接将服务器自己注册到9999的实例上。不配置这项的话,本注册中心就不会注册到其它注册中心中,只能作为自己独立的服务器提供注册服务。
  instance:
    hostname: server-8888  #实例的 host名,可以使用hostname来代替ip地址,如上方的defaultZone配置,这里默认的hostname是读取的本机的ip地址:localhost,server-8888只是一个别名
---
#第二个实例,在学习或者测试环境中,可以通过[---]在yaml中配置多个启动实例,同时在eclipse的 boot dashboard中也要右键增加实例配置(open config)
spring:
  application:
    name: service-server
  profiles: server-9999
server:
  port: 9999                        #服务管理中心端口
eureka:
  client:
    #register-with-eureka: false     #(单节点时设置false)防止将自己当作客户端去注册从而引发Cannot execute request on any known server 问题
    #fetch-registry: false           #同上
    service-url:
      defaultZone: http://server-8888:8888/eureka/  #默认使用8761,需要手动覆盖成自己的
  instance:
    hostname: server-9999

在完成上述配置后,直接在启动类或者boot dashboard中右键启动即可,在浏览器中输入 http://localhost:8888/ 或者(需要先启动) http://localhost:9999/即可进入注册中心管理。
简略图如下:

dashboard

添加多个boot实例时,只需要在对应的实例上右键-> open config即可,点开配置后如下:
配置多实例

注意:初次添加的时候可能需要手动输入profile和main type
服务器的配置比较简单,后续没有其它特殊需求的话,默认的功能基本足够练习或者一般性的开发使用。

启动一个实例后,如果出现 connection refused或者下图的异常不用惊慌:

单服务器异常

上文的代码中有注释,单服务器同样也是客户端,只启动自己的情况下,注册中心没有任何服务,并且会默认将自己注册,register-with-eureka = false fetch-registry: false即可取消将自己注册,因为需要搭建集群的关系,这里不推荐修改默认值,所以可以暂时无视这个异常。
进入启动的注册中心后台:
8888端口的注册中心

注意: 注册中心会按照默认时间间隔(如果没有自定义配置的话)进行心跳刷新,在没有任何服务心跳的情况下会出现红色字体的警告,服务器会进入保护状态。
有以下几个特征:

  • 自我保护机制的工作机制是如果在15分钟内超过85%的客户端节点都没有正常的心跳
  • Eureka Server不再从注册列表中移除因为长时间没收到心跳而应该过期的服务。
  • Eureka Server仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上,保证当前节点依然可用(可以认为一个服务器就是一个节点。多节点组成集群)。
  • 当网络稳定时,当前Eureka Server新的注册信息会被同步到其它节点中。
    对于这个警告,解决的办法很简单,只要注册一个服务进去就可以了,因为本篇是讲述服务器配置,所以我们再开启一个服务器实例(server-9999)互相注册即可:


    启动两个服务器实例

    此时,通过控制台可以看到,之前的异常也不再出现,在微服务正常注册后,两个问题全部解决。


    控制台(可以切换两个服务的控制台查看日志信息)

    进入localhost:9999后,在实例的注册中心后台可以看到:
    9999端口的注册中心后台

    8888端口的注册中心后台

红色警告消除,由于服务器相互注册,DS Replicas会显示对方服务器的信息(server-8888或者server-9999),同时也会从该副本中拷贝所有的服务信息,形成双节点。图中同样看到,SERVICE-SERVER已经注册在注册中心中,并且有两个可达区域(2个实例)。
注意:两个实例的名字必须相同,即yaml配置文件中的spring.application.name需要一致才能形成负载均衡(后续文章会讲述)。

文章会根据最新的情况以及开发经验持续更新。。。


本文是根据本人的代码以及工作时的搭建经验反推的文字说明(基于个人理解),可能论述并不精确,仅作参考。

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