最近自己搭了一个spring gateway网关,一个eureka注册中心,和两个应用,采用openFeign进行两个应用间的通讯,搭建步骤主要参考:http://t.csdn.cn/WBIsz
这个过程中遇到很多的坑,有些是自己失误导致,在次记录一下:
环境介绍:
操作系统:Windows10,(CentOS Linux release 7.9.2009 (Core),容器dockerdesktop4.9.0,这个环境只部署了Eureka server,然后通过宿主机和容器做了端口的映射后,本机访问通过,后面就没有再使用容器部署,觉得只在本机环境进行练习即可)。
jdk:8;idea:2018;maven:3.5.0;postman:v10
0,环境搭建
1)下载jdk,下载maven,配置环境变量,验证是否配置成功java -version,mvn -version。
2)给idea配置mvn,也可以使用idea自带的mvn,只是我习惯自己配置,在settings.xml指定国内仓库和本地参考(参考: maven 设置阿里云仓库-百度经验 (baidu.com))。
1, 步骤1是搭建Eureka Server
1)问题1:搭建过程中,自己用了最新的maven版本,3.8.6,结果工程创建时,无法下载依赖包,报错:Unable to import maven project: See logs for details,经过查找,发现idea版本与maven版本不匹配导致,重新下载,配置maven:3.5.0,依赖能正常下载,参考:http://t.csdn.cn/s5CGZ。
2)问题2:无法识别yml格式的文件,导致配置了8001端口,还是总是指向tomcat默认的8080端口,这个是因为在application.properites里写的,当然不识别了,创建application.yml,于是进行配置,这个问题得到了解决。
3)问题3:Eureka控制台报警告:EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER,这个大红字虽然不影响使用,但是看着别扭,原因是server和client之间每隔30秒会进行一次心跳通信,告诉server,client还活着,可以选择关闭告警功能,或调低比例阈(yu四声)值,我先是选择关闭阈值(参考:http://t.csdn.cn/LIyxg),发现这个警告没有了,又出现了新的警告,大概意思是说你这个关闭了,安全性就不保证了,于是调低了阈值(参考:http://t.csdn.cn/kfB7r),问题解决。
4)问题4:部署到容器,与宿主机端口映射的问题(如果本机练习,则无此问题)。(参考:http://t.csdn.cn/bwrNq),这里其实在宿主机找指定容器的配置文件可能会和博文中的不一致,我的配置文件地址在该博文的评论里。一定要先停止要修改的容器,然后修改配置文件,修改后不要启动那个容器,否则配置信息将恢复到原来的内容,你的修改就没有了,要重启整个docker,怎么重启呢,搞了半天也不知道,网上查也查不到,没办法,已经零点以后了,选择粗暴方法,用任务管理器杀掉所有docker的相关进程,然后重启电脑,启动docker,就好了,赶紧睡觉。
2. 步骤2是搭建两个应用
1)用postman发起服务,发起调用的那个服务总是报404,而被调用的服务正常。一看发起调用的服务编译报错了:NoSuchBeanDefinitionException: No qualifying bean of type 'com.digitalpower.loanservice.service.RpcdepositService' available,奇怪啊奇怪,启动类在最外面,确好像总也扫描不到那个rpc的服务类,加上了ComponentScan注解,指定了服务类的路径,倒是编译通过了(虽然编译通过,还是非常纳闷,启动类会扫描本目录和子目录的类啊,我的目录结构也没错,为啥还要指定???),但是postman发起还是404,又到零点了,不搞了。第二天,发现了问题,原来是发起调用的服务的启动类没有加注解EnableFeignClients,加上后,编译通过,404消失,feign跨应用调用,也成功。
3. 步骤3是搭建gateway。这一步很简单也很顺利,进行了yml配置,不需要动任何代码,Eureka控制台显示三个服务均启动了,指定gateway的地址端口,postman发起,成功。