ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

为什么不能在FeignClient接口上添加@RequestMapping 注解?

2022-07-12 12:31:18  阅读:280  来源: 互联网

标签:FeignClient 网关 服务 RequestMapping 接口 RPC 注解


  最近发现许多同学在开发协议包时, 会在 FeignClient 接口上添加 RequestMapping 注解来设置统一接口前缀, 如下:  

这么做会产生哪些问题呢?

  1. 与消费方服务原有接口产生冲突

我们设想一个最常见的场景, 服务A实现并提供协议包, 服务B在项目中引入了该协议包 假设协议包中有这么一个RPC接口: 服务B中存在这么一个聚合接口: 此时服务B将无法启动成功, 报错信息如下:  
  1. 多个协议包中的RPC接口冲突

我们设想这样一个场景, 服务A和服务C分别提供了一个协议包, 服务B在项目中引入了这两个服务的协议包 假设服务A和服务C协议包中分别存在如下RPC接口:   服务B将无法启动, 报错信息如下:  
  1. 使网关路由失效

我们设想这么一个场景, 网关做登入拦截时需要RPC调用用户服务, 于是用户服务A提供了一个协议包给网关 假设协议包中存在如下RPC接口: 此时服务B来接入网关(将聚合接口接入到 xxx.acg.team 域名下), 并绑定至 http://xxx.danchuangglobal.com/** 这个路由. 如果服务B中存在以下聚合接口: 通过 http://xxx.acg.team/user/info 访问时, 网关无法正确的将请求转发至服务B, 并且报错信息如下:  

为什么在FeignClient接口上添加RequestMapping注解会产生以上问题?

  1. 扫描到的FeignClient接口会被注册为一个SpringBean (即使是消费方)
  2. Spring认为类上携带RequestMapping注解的Bean会是一个Handler (对于消费方来说, 这是一个错误的判定)
  1. 一个应用中不允许注册多个相同的URL Handler, 所以如果消费方已有的接口URL与RPC接口的URL相同时就会报错
  2. 对于网关, 请求进入网关时, 假设网关自身存在匹配URL的Handler, 则会短路处理, 而不会再去通过路由转发至下游 (实质上这并不是网关真实的Handler), 这导致了路由的失效
 

应该怎么调整优化?

  1. 将FeignClient接口上的RequestMapping注解转移到对应的实现类上, 如下:
  1. 在FeignClient接口注解上添加 path 属性, 值与实现类的RequestMapping值相同

标签:FeignClient,网关,服务,RequestMapping,接口,RPC,注解
来源: https://www.cnblogs.com/imyjy/p/16469625.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有