今天集成项目接口对接,别人说,为什么你的spring cloud 提供的接口没办法用feign的方式调用,我当时觉得好奇怪,因为cloud项目本身自己去调试的时候我通常是不开eureka的,所以都是基于serveice本身去调用,我们通常的项目结构包如下:
project:
-xxx-api
-xxx-dao
-xxx-service
api 是对外提供feign 接口调用的,但是pom file 要引用feign
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
dao 就不说了,我们使用mybatis,里边放的都是mapper文件和bean 文件
service,是主要是url mapping,就是spring 中的controller,用于处理rest 之间的调用
好了,前戏就到这里, 开始说下我们遇到的问题。
先看看我的eureka,启动界面:
第一个问题: connection refused.
没办法,把pom file 梳理了一遍,把缺feign的依赖包加进去了,然后竟然OK了,不过转身就开始报下个错误,真是尼玛脱裤子不认账啊。。。
第二个:
Load balancer does not have available server 。。。。。。。。。。。。。
真尼玛奇怪了,eureka注册有了, feign也可以调用了, 竟然说找不到服务,然后开始各种百度,各种查询类似的问题,但是都没结果。
这心情真是日了狗了。
又检查代码,又开始梳理pom 文件,然后application.preoperties 文件,又和别的已经可以运行的项目文件进行比较,没啥啊。。。
然后抽根烟发呆,也开始想为什么 为什么。
突然想起早上,查另外一个问题的时候有人说,spring boot对文件命名有自己的查询规则。 我想了想,是不是命名有问题,因为java的习惯是文件名都大写,所以我的service名字也都是这种格式第一个单词之间都是大写。请大家注意下面的写法:
错误写法:
# spring
spring.application.name=noticeCenter-service
正确写法:
# spring
spring.application.name=noticecenter-service
抱着尝试的心态改完配置文件重新clean install一下,重新发布,cnmd,竟然好了,好了, 真心没看错, 真的可以调用了。
可以再另外一个service调用了。
这个算不算坑? 算不算坑?
通过这个方式在另外一个系统可以调用了,调用的url 是这样的http://noticecenter-service/api/noticeCenter/noticeCount
大写是绝对不可以的。
好了,本次解决时间大概用了3个半小时。
大家都注意下,别乱大小写。
http://noticeCenter-service/api/noticeCenter/noticeCount