调用者关系
课程服务调用 elasticsearch 服务 出现了问题
elasticsearch 服务 本地配置文件
spring:
application:
name: search
cloud:
nacos:
server-addr: 192.168.101.65:8848
discovery:
namespace: 2ad3101b-273d-413c-a66c-987232f028ed
group: xuecheng-plus-poject
config:
namespace: 2ad3101b-273d-413c-a66c-987232f028ed
group: xuecheng-plus-project
file-extension: yaml
refresh-enabled: true
shared-configs:
- data-id: swagger-${spring.profiles.active}.yaml
group: xuecheng-plus-common
refresh: true
- data-id: logging-${spring.profiles.active}.yaml
group: xuecheng-plus-common
refresh: true
profiles:
active: dev
nacos 中的的配置文件
server:
servlet:
context-path: /search
port: 63080
elasticsearch:
hostlist: 192.168.101.65:9200 #多个结点中间用逗号分隔
course:
index: course-publish
source_fields: id,name,grade,mt,st,charge,pic,price,originalPrice,teachmode,validDays,createDate
elasticsearch 服务中被调用接口
@RestController
@RequestMapping("/index")
public class CourseIndexController {
@Value("${elasticsearch.course.index}")
private String courseIndexStore;
@Autowired
IndexService indexService;
@ApiOperation("添加课程索引")
@PostMapping("course")
public Boolean add(@RequestBody CourseIndex courseIndex) {
Long id = courseIndex.getId();
if(id==null){
XueChengPlusException.cast("课程id为空");
}
Boolean result = indexService.addCourseIndex(courseIndexStore, String.valueOf(id), courseIndex);
if(!result){
XueChengPlusException.cast("添加课程索引失败");
}
return result;
}
}
课程服务中的feigin配置代码
@FeignClient(value = "search-service",fallbackFactory =SearchServiceClientFallbackFactory.class )
public interface SearchServiceClient {
@PostMapping(path = "/search/index/course")
Boolean add(@RequestBody CourseIndex courseIndex);
}
排除思路
我一直进行调试,发现当我调用 课程服务的中的接口,去进行远程调用 elasticsearch中的接口时,会一直出现404 的情况,我第一时间就以为是调用远程服务路径出现了问题,但是,当我仔细检查完成时,完全没有找到路径有问题。
然后我在想是否是elasticsearch服务 or 课程服务 其中一个服务出现了问题
课程服务一直是都可以用的,否则前端项目是无法正常运行的,所以可能有问题 的就是 elasticsearch服务了
然后进行检查elasticsearch服务,但是在elasticsearch服务中并没有发现问题,测试了一个功能,功能也是正常的
这个时候,我觉得是不是因为 课程服务没有从nacos拉取到 elasticsearch服务的地址,导致的404,但是在课程服务想要查看服务列表还是比较麻烦。
我使用了gateway网关进行 路由一下 elasticsearch服务,然后在日志中查看网关拉取到elasticsearch服务的示例总数
当我仔细查看了网关服务日志,发现网关其实是拉取到了
但是当我使用gateway进行测试elasticsearch服务功能时,还是出现了404 ????
这个时候就迷茫了,服务单独无问题,也从nacos中有拉取到服务地址,路径决定没有问题,完全没有了排查思路
找到问题,解决问题
当一直找不到问题,且没有解决思路,我就一直查看配置文件,最后还是回到了路径问题上面去,查看
最后实在没有办法了,我将所有配置都重写了一边,顺便重写了 springmvc 拦截的路径
从 search 更改为了 search-api
修改前
server:
servlet:
context-path: /search
port: 63080
elasticsearch:
hostlist: 192.168.101.65:9200 #多个结点中间用逗号分隔
course:
index: course-publish
source_fields: id,name,grade,mt,st,charge,pic,price,originalPrice,teachmode,validDays,createDate
修改后
server:
servlet:
context-path: /search-api
port: 63080
elasticsearch:
hostlist: 192.168.101.65:9200 #多个结点中间用逗号分隔
course:
index: course-publish
source_fields: id,name,grade,mt,st,charge,pic,price,originalPrice,teachmode,validDays,createDate
将openfeign中的配置进行修改
@FeignClient(value = "search-service",fallbackFactory =SearchServiceClientFallbackFactory.class )
public interface SearchServiceClient {
@PostMapping(path = "/search-api/index/course")
Boolean add(@RequestBody CourseIndex courseIndex);
}
然后进行测试,发现测试通过,服务间的调用通了,不会再出现404 , 先是网关测试通过,然后,课程服务调用功能也正常了。。。
总结
感觉出现了这个问题的原因 猜测2点
1: 我的微服务名称 和 springmvc的拦截路径一直 出现了 冲突导致的问题 -- 不确定
因为我也有将服务名称进行修改过,但是问题还是存在
2: search可能是一个某处的关键字,导致在路由 or feign 在进行远程调用的时候,解析url路径出现了问题,导致一直出现404
次问题,本人没有进行重现测试,仅做参考