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

注册中心Eureka Server

新建项目

使用@EnableEurekaServer

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

但是不断报异常,why?

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

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

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

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

接下来配置实例名

实例名被修改成功

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

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

服务中心

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

通过 java 命令启动

启动成功效果

Mac 下 Ctrl+C 退出服务

后台执行

查看其相关进程信息

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

3.3 Eureka Client的使用

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

启动Server, 再启动 Client

发现并没有注册成功实例

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

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

再指定 client 名字

发现成功注册

此为 client 应用ip 地址

但其实可以自定义

接着点击进入那个链接,URL如下

  • Eureka保证AP 有时会发现如下红色警戒!

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

3.4 Eureka的高可用

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

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

将 eureka1注册到 eureka2上并启动

将 eureka2注册到 eureka1上并启动

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

我们来将1给关闭

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

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

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

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

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

新建 E3

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

3.5 Eureka总结

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏用户2442861的专栏

Apache与Tomcat联系及区别

    Apache与Tomcat都是Apache开源组织开发的用于处理HTTP服务的项目,两者都是免费的,都可以做为独立的Web服务器运行。Apache是W...

1662
来自专栏IT笔记

Nginx + Shiro + Ehcache 实现负载均衡集群(成绩报告查询系统)

项目介绍 最近在做一款产品,对外提供学生成绩报告的查询,支付,查看以及下载等一系列功能,这里就简称成绩报告查询系统吧。 初步参赛人数十万左右,可能会存在相对高的...

4015
来自专栏云计算教程系列

如何在CentOS 7上安装Bacula Server

Bacula是一种开源网络备份解决方案,允许您创建备份并执行计算机系统的数据恢复。它非常灵活和强大,这使得它在配置时稍微麻烦,适合在许多情况下进行备份。备份系统...

3873
来自专栏实用工具入门教程

如何部署 Bacula Server

Bacula是一种开源网络备份解决方案,允许您创建备份并执行计算机系统的数据恢复。它非常灵活和强大,这使得它在配置时稍微麻烦,适合在许多情况下进行备份。备份系统...

2103
来自专栏史上最简单的Spring Cloud教程

上传文件,经过Zuul,中文文件名乱码解决办法

问题描述 在项目中又一个上传文件的oss服务,直接调用服务的上传文件成功,如果经过网关zuul服务,上传中文名字的文件,文件名会出现乱码,最终导致上传失败,如果...

5336
来自专栏纯洁的微笑

Spring Boot 2.0(五):Docker Compose+Spring Boot+Nginx+Mysql 实践

我知道大家这段时间看了我写关于 docker 相关的几篇文章,不疼不痒的,仍然没有感受 docker 的便利,是的,我也是这样认为的,I know your f...

4494
来自专栏游戏开发那些事

【LINUX/UNIX网络编程】之使用消息队列,信号量和命名管道实现的多进程服务器(多人群聊系统)

        信号量(初值5,主进程接受一个客户连接后执行P操作判断是否超过5,转发子进程有一个客户退出后执行V操作,并发消息队列标识符)

1484
来自专栏用户2442861的专栏

linux GDB调试c++程序

  GDB 是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNI...

942
来自专栏译文

8种基于文件的Linux备份解决方案

在开发不同的 Web 项目时,我积累了大量的工具和服务,以方便开发人员、系统管理员和运维的工作。 在这些项目即将开发完成之时,开发人员面临的头号难题之一,是对媒...

26110
来自专栏漏斗社区

工具| 诸神之眼nmap定制化之初识篇

Nmap是学习网络安全必备的一款工具,有着强大的信息收集能力,有本书甚至因此称它为“诸神之眼” 。Nmap不仅仅是一个端口扫描器那么简单,它还有着一个强大的脚本...

4028

扫码关注云+社区