搭建简单的SpringCloud项目三:问题及解决
GitHub:https://github.com/ownzyuan/test-cloud
前篇:搭建简单的SpringCloud项目一:注册中心和公共层
启动失败一

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'consumerController': Unsatisfied dependency expressed through field 'dataApi'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.zy.api.DataApi': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalArgumentException: target values must be absolute.
问题简述:
同一接口路径中存在多个方法,路径识别失败,目标值必须为绝对值。
再查看代码:

可以发现出现2个接口路径相同的方法,甚至方法名都相同,因为Rest是接口提供方,Api作为接收方理应使用同一接口路径和方法名,因此只需要在路径正确的情况下加以修改即可。
修改DataApi:

测试启动:

启动成功。
调用服务出现404
feign.FeignException: status 404 reading StrApi01#returnStr01()

分析:
在定义服务提供者和消费者时,未区分对@FeignClient注解所修饰的身份,@FeignClient是标注此类为服务的调用方,也就是消费者,在本项目中对应的就是cloud-consumer。
再看看此时项目的结构:

很显然,在搭建架构的时候出现了问题,明明是消费方却提供给服务方接口,所以解决办法就是将2个框框处对换位置。
无法调用对应API
问题描述
这是server方暴露的服务:

这里的return是为了验证是否成功的一个测试语句。
这是consumer方接受服务使用的Api:

这是该Api的Hystrix的实现:

这里我没做服务器降级的处理,加入了一条return以便后续验证调用是否成功
通过controller调用该Api接口使用server提供的方法:

启动项目,打开postman测试:

可以发现返回的是DataFallback中的字符串,说明没有调用到服务。
再打开数据库查看:

可以发现确实没有添加成功。
解决
其实这个问题点比较易见,就是consumer中的启动类中没有添加@EnableFeignClients注解来扫描这些Api,现在将其添加:

再次打开postman测试:

打开数据库查看:

成功解决。
不过在添加完注解之后,其实并没有一帆风顺,因为添加之后启动就无法成功了,问题及原因见下一条。
启动失败二
问题描述
在刚添加@EnableFeignClients之后启动:

问题解释:大概意思就是存在多个@FeignClient修饰的类,他们@FeignClient的value的值都相同,比如,
DataApi中@FeignClient的value的值:

HelloApi中@FeignClient的value的值:

由于出现多个相同Bean,所以报错。
但是,一个服务提供肯定不是只提供一个接口的,所以一定会出现这个问题。
解决
具体分析参考:https://blog.csdn.net/u012211603/article/details/84312709
在配置文件中加入:

再次启动:

成功
项目不默认使用Java8
这本身不是一个大问题,只是出现莫名的爆红很烦,比如:

并且修改的时候,需要改动的地方很多
setting中的Java compiler

需要将圈出来的地方全部改为8
然后是将每个Module的版本改为8

改为如果切换了分支或者重启Idea,就又要重来,所以需要个很好的解决办法。
在父工程中的pom中添加
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
再刷新一下maven就完全解决了。
搭建简单的SpringCloud项目三:问题及解决的更多相关文章
- 搭建简单的SpringCloud项目二:服务层和消费层
GitHub:https://github.com/ownzyuan/test-cloud 前篇:搭建简单的SpringCloud项目一:注册中心和公共层 后篇:搭建简单的SpringCloud项目三 ...
- 搭建简单的SpringCloud项目一:注册中心和公共层
注:笔者在搭建途中其实遇见不少问题,统一放在后面的文章说明,现在的搭建是测试OK的. GitHub:https://github.com/ownzyuan/test-cloud 后续:搭建简单的Spr ...
- 用SpringBoot搭建简单电商项目 01
前几节呢,我们已经简单介绍了SpringBoot框架的使用,从这一节开始,我们尝试着使用SpringBoot框架来一步一步搭建一个简单电商项目.当然了,这不是真正的电商项目,你可以看成是一个CRUD案 ...
- python关于Django搭建简单博客项目(详解一)
上一篇我们说了如何搭建简易博客网站,下面我们来进行详细解答.本文没有特定顺序,请结合上一篇和源代码参照学习. 相关源代码和解析请参看:https://github.com/Cheng0829/mysi ...
- extjs6入门:用sencha cmd搭建简单的extjs6项目
开发准备 1.sencha cmd安装 2.extjs6.0.0 gpl正式版下载,地址:https://www.sencha.com/legal/gpl/ ,解压ext-6.0.0-gpl.zip ...
- vue-cli+webpack搭建简单的vue项目框架
0.先去官网下载安装nodeJS 1.在cmd中输入命令 node -version 若出现node版本号 则安装成功 2.通过命令:cd 文件夹名 进入某具体文件夹后进行如下命令操作: ...
- python关于Django搭建简单博客项目(教程)
由于csdn各种django blog博文都有或多或少的bug,所以我决定自己写一篇,先附上教程,详解在另一篇博文里,为了便于大家复制粘贴,本文代码尽量不使用图片. 源代码及解析文章请在我的githu ...
- 一个很简单的SpringCloud项目,集成Feign、Hystrix
Feign的功能:这是个消费者,根据服务注册在Eureka的ID去找到该服务,并调用接口Hystrix的功能:熔断器,假如A服务需要调用B服务的/cities接口获取数据,那就在A服务的control ...
- 手动搭建简单的vue项目
创建项目根目录 切换到根目录下 , 并执行 npm init , 所有选项都默认即可. 安装 webpack webpack-cli vue vue-loader 添加项目结构
随机推荐
- 疯狂Java基础Day1
--每过一遍基础,都是一次提升! 太多遗忘了,慢慢补... 推一个Java学习教程--->b站搜:狂神说Java系列(排序完毕) 推荐原因:讲的不错,会涉及到底层,也会讲讲面试. 一.注释 主要 ...
- 【做题记录】DP 杂题
P2577 [ZJOI2004]午餐 $\texttt{solution}$ 想到贪心: 吃饭慢的先打饭节约时间, 所以先将人按吃饭时间从大到小排序. 状态: \(f[i][j]\) 表示前 \(i\ ...
- 通过两个位置的经纬度坐标计算距离(C#版本)
/// <summary> /// 通过地图上的两个坐标计算距离(C#版本) /// Add by 成长的小猪(Jason.Song) on 2017/11/01 /// http://b ...
- JAVA笔记5__构造块、静态块/单例设计模式/继承/final关键字/super关键字
public class Main { { //构造块(在构造对象时调用,先于构造方法执行) System.out.println("我是构造块!"); } static{ //静 ...
- diff 命令,防止遗忘
常规输出: diff 1.file 2.file 并排格式输出: diff 1.file 2.file -y -W 50 显示说明 "|"表示前后2个文件内容有不同 "& ...
- kafka的安装
kafka是基于java环境的,所以需要先安装java环境 centos:yum install java-11-openjdk ubuntu:apt install default-jdk 默安装默 ...
- go输入Hello word
package main import "fmt" func main() { fmt.Println("hello word") } 输入hello ...
- 基于霸道秉火的STM32F103ZET6嵌入式开发之------定时器中断3
1 #include "time.h" 2 #include "led.h" 3 #include "beep.h" 4 //¶¨Ê±Æ÷Ö ...
- 【linux系统】命令学习(八)bash 编程实战学习
常见shell : bash sh zsh windows: git bash cygwin MAC : terminal iterm netstat 是linux下用于显示网络状态的命令.通 ...
- 【linux系统】命令学习(六)awk sed grep 与管道的使用
程序运行环境输入与输出 标准输入0 read a;echo $a 标准输出1 echo cesh 错误输出 ls notr 管道重定向 管道与管道之间可以重定向 管道与文件之间可以重定向 用于写入 将 ...