Eureka 注册中心
Posted syjp
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Eureka 注册中心相关的知识,希望对你有一定的参考价值。
1、eureka版本更新后,pom依赖名称变化
v1.2.7
spring-cloud-starter-eureka-server
v2.0.0
spring-cloud-starter-netflix-eureka-server
2、常用注解
@EnableEurekaServer注解 表示开启EurekaServer服务,开启注册中心
@EnableEurekaClient注解 表示将当前服务注册到Eureka上
3、常见问题
1)以别名方式运行必须调用依赖ribbon负载均衡器 @LoadBalanced,否则会抛出java.net.UnknownHostException异常
2)集群时注册中心的服务名称要相同
3)Eureka集群时,每个注册中心上面都会有相关服务,但是蚂蚁课堂上面演示为只有第一个注册中心上面有服务,当第一个注册中心关闭后,程序会在30秒后默认将服务放在第二个注册中心上;
4、Eureka的自我保护机制
默认情况下 EurekaClient 会定时向 EurekaServer 端发送心跳包,如果EurekaServer在一定的时间内没有收到EurekaClient发送的心跳包,便会直接从服务注册列表中剔除该服务(默认90秒内)。
但是如果在短时间内丢失了大量的服务实例心跳,这时候EurekaServer就会开启自我保护机制,不会去剔除该服务。
为什么不会剔除呢?
为了防止EurekaClient是可以正常访问的,但是只是EurekaClient与EurekaServer网络访问不通,防止误剔除。
应该在什么环境下开启自我保护机制?
建议在本地环境禁止自我保护机制,在生产环境开启自我保护机制。
因为本地测试可能需要频繁的开启/关闭某些服务。
关于自我保护机制的一些问题:
最好的体现就是:memberApp负载均衡,先开8400端口,关闭之后再开8401端口,此时你会发现注册中心上始终都有8400端口的服务;而你关闭自我保护机制后,再重复以上步骤,这个8400端口会迅速消失;
--》idea升级为2018.2后,这个memberApp负载均衡写不了了,改变端口重启服务时idea提示该项目为单例模式,必须先关闭后重启。【已解决】
###测试时需要关闭自我保护机制,保证不可用服务及时剔除
enable-self-preservation: false
eviction-interval-timer-in-ms: 2000
5、导入atom主题后,idea项目报错,重构时遇到以下异常:
Error:Cannot run program "C:Program FilesJavajdk1.8.0_92injava" (in directory "C:UsersAdministrator.IntelliJIdea2017.1systemcompile-server"): CreateProcess error=2, 系统找不到指定的文件。
--》当初只顾看Event Logs了,没有检查SDK是否配置;
--》重装后,SDK没有配置,也出现该问题,配置好之后就没事了;
6、DiscoveryClient可以获取服务的一些信息
7、Feign是一个声明式的Http客户端调用工具,采用接口+注解方式实现,易读性比较强
8、由于考虑到后续的服务降级,比如fallback属性需要指定类路径,而类路径是是订单服务,而不是会员服务;
--》服务降级取决于调用者,而不是被调用者;
9、依赖聚合项目
实体类最好放在接口项目中
Modifier ‘public‘ is redundant for interface methods less... (Ctrl+F1)
Inspection info: Reports any redundant modifiers on interfaces or interface components.
接口不能加@RestController,因为接口不能被实例化
引入依赖时,版本号必须得加
依赖聚合项目想要达到的目的:避免传统的feign缺点,在order中建立一个类写着跟memberController一样的内容,这样很冗余;所以就采用maven子父工程,这样一来,在order中建立的feign类只需要继承memberService就可以了。
--》注意这个项目分了Service,ServiceImpl,但是没有Controller,这个MemberService完全和之前项目的feign类内容一样。
10、码云写中文,获取时会乱码
11、接口产生背景
在面向服务架构和微服务背景下产生,目的都是为了解耦。
rpc远程调用中产生的
接口如何进行分类
开放接口:其他机构合作伙伴进行调用(必须在外网访问),如蚂蚁开放平台、微信公众号开发
需要通过appid+appsocet生成accessToken进行通讯。
对接支付开发、微信开发会用到。
这样设计的目的:可以授权一些接口权限,OAuth2.0协议方式,第三方联合登陆。
内部接口
一般只能在局域网中进行访问,服务与服务调用之间关系都在同一个微服务中。
目的是为了保证安全问题。
面试问答,现在让你去设计一套公司项目的接口,你会如何设计?
考虑:接口权限(开放接口|内部接口),开放接口要遵循OAuth2.0协议,内部接口要经过网关才能访问;
考虑幂等性、安全性(https)--采用双向加密、防止篡改数据(验证签名)、使用网关拦截接口,实现黑名单和白名单、 接口使用http协议+json格式,采用restful风格,目的是为了跨平台。
然后需要考虑高并发,需要对接口服务实现保护,进行服务降级、熔断、隔离之类,最后使用统一API管理平台api swagger
12、后续的Swagger、SpringCloud bus消息总线、SpringCloud消息驱动、SpringCloudStream我没有实践,关于消息驱动这一块我没看完,因为对于消息队列很不熟悉,有点听不懂;
问题:
注册中心关闭后,消费者还可以访问生产者?
zookeeper的临时节点和持久节点?
不建议使用 synchronized,使用原子计数器,应为线程安全,效率非常高,使用cas无锁机制?
consul上面的order不能访问member,蚂蚁课堂没有演示该场景?
蚂蚁课堂说Controller不要,直接改成Service;
继承后,方法注解是否一并被继承
同一个父/祖父工程下的项目,是不是可以相互进行依赖
xxl-job
备注:
E:Download FilesChromeDownloadspringcloud资料下载cloud文档11-18上课代码springcloud-2.0-eureka-server
D:Computer FilesFile_Storage_AddressSoftware_Data_CenterIdeaProjects
必须要配置spring的仓库地址,否则jar包下载不下来,就蚂蚁课堂最后那句话
以上是关于Eureka 注册中心的主要内容,如果未能解决你的问题,请参考以下文章
SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端Eureka 服务信息Eureka 发现管理Eureka 安全配置Eureka-HA(高可用) 机制Eur(代码片段
注册中心 Eureka 源码解析 —— 调试环境搭建(含源码)