使用feign 进行远程调用时,无故出现404 -- 所以配置文件都是ok 已解决问题

调用者关系 

课程服务调用  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

次问题,本人没有进行重现测试,仅做参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值