您现在的位置是:首页 > 文章详情

SpringCloud微服务实战(三)-服务注册与发现

日期:2018-06-09点击:377

注册中心Eureka Server

img_b23e7a32627dc882c17e9e1e3c736b3e.png
新建项目

使用 @EnableEurekaServer
img_08de274a1be02c86907fecfbf9559a87.png

就可以让应用变为Eureka服务器,这是因为spring boot封装了Eureka Server,让你可以嵌入到应用中直接使用
直接运行成功如下
img_a2963f0c5bd1901f56fa4686f31c159a.png

但是不断报异常,why?
img_7a08ea7594d420f6e196d23d184fbfb6.png

这是因为该应用虽然是 Server 端,但也同时是 Client 端,也需要一个注册中心将自己注册进去
为消除其异常,修改下配置
配置需要注册的地址,也就是往自己身上注册
img_021348f5c910ce51a89e89f19ac76012.png

通过观察源码,知道其实是一个 map, 所以配置如下
img_e0fc525e06039b6621c89e85cc5bbcec.png

启动仍旧报错,其实正常问题,因为服务端自己又是 Server, 又是 Client, 服务端未启动完成时,客户端肯定是无法找到服务端的
但是 eureka 的服务端/客户端采用心跳通信方式
img_ee86dad727bd2e6b85571b7717d1549b.png

可看到地址已随配置被改变

接下来配置实例名


img_154ba1863ff1505a160600e51fad714e.png

img_9ea301f3794f5261a89fa5fe43582978.png
实例名被修改成功

但是该应用本身就是个注册中心,不需要将其显示在注册实例中,通过以下配置


img_07f8516ef6c220b8c6ae963939e468fc.png

为防止冲突,将端口号回改为默认
img_8fb94929afe7099b44baf432e32755fd.png

img_c2fce51f93073c6b1c4b58ec0dfc97cf.png

服务中心

img_295c62dd2dba99d3adadb0e94a6d4a72.png

为避免每次手动启动,将应用打成 war 包(jar)


img_b20797b864c77bd99cefb65fd072b1af.png

img_a2c80fb69916f50306aed08ae1d5a4a6.png
通过 java 命令启动

img_3c5ea9e912ae73c6139a2bca279d6e9d.png
启动成功效果

img_70a66492019995fe5b46a60ce9698711.png
Mac 下 Ctrl+C 退出服务

img_23500bfe814445fd743a738ace2b3bfe.png
后台执行

img_cae14c414b0be2dd67573e653a95c217.png
查看其相关进程信息

如此该应用就方便了我们,不需要每次都去手动启动应用,在后台会重启,若想杀死进程直接 kill


img_5a7f792bb768fb959c26ba07f3d1cf0f.png

3.3 Eureka Client的使用

img_519952e0f4f715354d37aea417ea2e00.png

默认情况下,DiscoveryClient的实现将使用远程发现服务器自动注册本地Spring Boot服务器。可以通过在@EnableDiscoveryClient中设置autoRegister=false来禁用此功能。

启动Server, 再启动 Client


img_59361304bf2f4053675363bee4dfd4a8.png
发现并没有注册成功实例

因为没有配置注册目标地址信息


img_47fc3499b6b695254838db3d6cc654a1.png

之后再次重启,依旧无法注册成功,几经勘察,添加以下依赖后,成功运行,注册到服务器
img_535511d985bdab62717fbea0a6237cf0.png

再指定 client 名字


img_fc1dc1ed76d5f44c480f3d2d63d10425.png

发现成功注册
img_e47630dd56c31abd757b0b50b4eb6172.png

此为 client 应用ip 地址
img_b5ab806f06570cf29f7b2c7d4195287d.png

但其实可以自定义
img_0be0f11419c59d8398f2d76bf050bd33.png

接着点击进入那个链接,URL如下
img_8363a2f5c755eee464ed8679af6882a3.png
  • Eureka保证AP
    有时会发现如下红色警戒!


    img_15d63c7137b3058e9f4ad5b520d31bb3.png

    Eureka看明白了这一点,因此在设计时就优先保证可用性。我们可以容忍注册中心返回的是几分钟以前的注册信息,但不能接受服务直接down掉不可用。也就是说,服务注册功能对可用性的要求要高于一致性。
    如果Eureka服务节点在短时间里丢失了大量的心跳连接(注:可能发生了网络故障),那么这个 Eureka节点会进入“自我保护模式”,同时保留那些“心跳死亡”的服务注册信息不过期。此时,这个Eureka节点对于新的服务还能提供注册服务,对于“死亡”的仍然保留,以防还有客户端向其发起请求。当网络故障恢复后,这个Eureka节点会退出“自我保护模式”。Eureka的哲学是,同时保留“好数据”与“坏数据”总比丢掉任何数据要更好。
    在开发模式,最好关闭该模式(默认是开启的),仅能在开发环境关闭!,生产环境禁止关闭!!!


    img_cdc187ed74cdd8ca753e451bbd8a70dd.png

3.4 Eureka的高可用

如果一台 eureka宕机了咋办呢,为了实现高可用,如果直接加一台服务器并无任何卵用,考虑将两台 eureka 互相注册


img_d9ad18a657befe080eee306381497296.png

复制得到两份 eureka,并以端口区分


img_c28ab9baad54c377e815e06121842c01.png

将 eureka1注册到 eureka2上并启动
img_25e326fd3d83d2e2c693591ef59b0d9a.png

将 eureka2注册到 eureka1上并启动


img_edb1c08a576a84c56d4bf10fc4c282f2.png

img_c081a9bae62f0544a48361cec5db7dfd.png

img_ab9cfa9e6cfe60d44dd6bea77f23ebf6.png

发现 client 在1,2同时都注册成功了!
假如此时 eureka1宕机了,会发生什么呢?
img_908cae7690f8c64e90201cabcefff77d.png

我们来将1给关闭
img_ddb6682dff78225b504e0f0e9cc350c7.png

img_02b56af8dbc308add0621876bb08fa69.png

img_1f3305fb1962cf3e83d15423504246ce.png

发现2依旧存活,并且 client 还在连接

若此时再 client 端重启又会发生什么呢?


img_551eecaeea028d7418fdaf77242f554f.png

因为无法注册,自然报错了,E2上也没有 client 端再连接了


img_7759807790377e97e98dca2caf3d094b.png

那么问题来了,怎么才能保证 E1宕机后, client 仍能注册在 E2上呢?只要保持每次都同时往两个 E 注册
img_ce68ccbdb7bcb0595c5f810053014c68.png

同理可得,当有3个 E 时,如此相互注册


img_f2d24bd9a61c61fbed791e6a4bf50c0e.png

img_da37654cac79a05a9bf44a4d9c87173a.png

img_c7864f9034e3debc5d034526c38c9496.png

新建 E3
img_cf2432832ee5c5f6f263a04ecd79e262.png

img_cdd16f185ab0ebe39ba28da4d71026c2.png

img_13d99b115793fa9d1b961404739496b4.png

对于我们的开发环境,部署一个 E 即可,不再集群

3.5 Eureka总结

img_8ac87d3ab7077a39197e9297efdeb947.png

3.6 分布式下服务注册的地位和原理

img_fbf6e4a8056a967ae1706bcde3779eb9.png

img_3efc59e9302902e9ad6b9cf00c9b7c6b.png

A 类比青楼中的嫖客, B 类比青楼女子,注册中心呢就相当于青楼中的妈咪
一般 嫖客服务一来,就肯定直接点名春花还是秋月呀,直接问妈咪要花魁就行


img_91f48dc6128afd8f65a0a298cfc389a2.png

img_74410a793c7b9ed4d64936939871da76.png
原文链接:https://yq.aliyun.com/articles/635956
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章