GitHub:https://github.com/ownzyuan/test-cloud

前篇:搭建简单的SpringCloud项目一:注册中心和公共层

搭建简单的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项目三:问题及解决的更多相关文章

  1. 搭建简单的SpringCloud项目二:服务层和消费层

    GitHub:https://github.com/ownzyuan/test-cloud 前篇:搭建简单的SpringCloud项目一:注册中心和公共层 后篇:搭建简单的SpringCloud项目三 ...

  2. 搭建简单的SpringCloud项目一:注册中心和公共层

    注:笔者在搭建途中其实遇见不少问题,统一放在后面的文章说明,现在的搭建是测试OK的. GitHub:https://github.com/ownzyuan/test-cloud 后续:搭建简单的Spr ...

  3. 用SpringBoot搭建简单电商项目 01

    前几节呢,我们已经简单介绍了SpringBoot框架的使用,从这一节开始,我们尝试着使用SpringBoot框架来一步一步搭建一个简单电商项目.当然了,这不是真正的电商项目,你可以看成是一个CRUD案 ...

  4. python关于Django搭建简单博客项目(详解一)

    上一篇我们说了如何搭建简易博客网站,下面我们来进行详细解答.本文没有特定顺序,请结合上一篇和源代码参照学习. 相关源代码和解析请参看:https://github.com/Cheng0829/mysi ...

  5. extjs6入门:用sencha cmd搭建简单的extjs6项目

    开发准备 1.sencha cmd安装 2.extjs6.0.0 gpl正式版下载,地址:https://www.sencha.com/legal/gpl/ ,解压ext-6.0.0-gpl.zip ...

  6. vue-cli+webpack搭建简单的vue项目框架

    0.先去官网下载安装nodeJS 1.在cmd中输入命令 node -version    若出现node版本号 则安装成功 2.通过命令:cd 文件夹名     进入某具体文件夹后进行如下命令操作: ...

  7. python关于Django搭建简单博客项目(教程)

    由于csdn各种django blog博文都有或多或少的bug,所以我决定自己写一篇,先附上教程,详解在另一篇博文里,为了便于大家复制粘贴,本文代码尽量不使用图片. 源代码及解析文章请在我的githu ...

  8. 一个很简单的SpringCloud项目,集成Feign、Hystrix

    Feign的功能:这是个消费者,根据服务注册在Eureka的ID去找到该服务,并调用接口Hystrix的功能:熔断器,假如A服务需要调用B服务的/cities接口获取数据,那就在A服务的control ...

  9. 手动搭建简单的vue项目

    创建项目根目录 切换到根目录下 , 并执行 npm init , 所有选项都默认即可. 安装 webpack webpack-cli vue vue-loader 添加项目结构         

随机推荐

  1. ASP.NET MVC 中使用 jQuery 实现异步搜索功能

    常见的几种异步请求方式: Ajax.BeginForm   异步提交文本的形式 Ajax.ActionLinkk 文本链接的形式 Client Validataion  客户端的认证 一.用jQuer ...

  2. Ubuntu 16.04 curl 安装 使用

    curl是利用URL语法在命令行方式显工作的开元文件传输工具. 安装 $ sudo apt install -y curl 使用 $ curl http://www.baidu.com 这是最简单的使 ...

  3. Linux 内核网桥源码分析

    Linux网桥源码的实现 转自: Linux二层网络协议 Linux网桥源码的实现 1.调用 在src/net/core/dev.c的软中断函数static void net_rx_action(st ...

  4. S 锁与 X 锁的爱恨情仇《死磕MySQL系列 四》

    系列文章 一.原来一条select语句在MySQL是这样执行的<死磕MySQL系列 一> 二.一生挚友redo log.binlog<死磕MySQL系列 二> 三.MySQL强 ...

  5. Typecho部署小破站

    写在前面 以前利用 Github Page + Hexo框架 + Next主题搭建过静态博客,没错就是那个黑白色系的网页!但是体验并不是很好,一来本身是静态网页,页面内容要修改都需要在本地修改完上传到 ...

  6. httprunner3源码解读(3)client.py

    源码目录结构 ApiResponse 这个类没啥好说的 class ApiResponse(Response): """ 继承了requests模块中的Response类 ...

  7. CSS学习(二)选择符

    元素选择符:以元素名作为选择符(span{ color: red; }) 群组选择符:将两个选择符用逗号隔开构成群组(span, div{ color: red; }) 通用选择符:通用选择符(*)将 ...

  8. LeetCode88 合并有序数组

    1. 这道题为简单题目,但是还有需要好好思考的 2. 首先不能使用额外数组合并,不然就没得后文了 3. nums1后面有0填充,且填充数量正好是n,整个数组大小即m+n能够容纳合并后的数据 4.既然要 ...

  9. python及pygame雷霆战机游戏项目实战01 控制飞机

    入门 在这个系列中,将制作一个雷霆战机游戏. 首先,将游戏设置修改一下: WIDTH = 480 HEIGHT = 600 FPS = 60 玩家精灵 要添加的第一件事是代表玩家的精灵.最终,这将是一 ...

  10. 环境(8)Linux用户组权限

    一:Linux时间日期-时间同步策略 1.日期与时间 ①时间命令 data:查看当前系统时间 cal :查看日历     cal  2020 修改时间:   date -s  11:11:11    ...