Feign-手动创建FeignClient
前言
在Feign-请求不同注册中心的服务中,提到,如果需要请求不同注册中心的服务,可以设置@FeignClient
的url
属性。
这种做法有个缺点,需要服务消费者,配置各个环境的url
。
如果服务提供方url
变更,需要通知到服务消费者,如果消费者很多,变更通知也是件麻烦事。
基于java的封装特性,作为独立的服务提供者,如果能封装url
,岂不是更好?
解决方案
服务提供者
//@FeignClient(name = "feign-provider") public interface CustomizeFeignApi { @RequestMapping(value = "/customize", method = RequestMethod.GET) String queryCustomize(); }
@FeignClient
,不需要。加上的话,会自动创建对应bean,达不到手动创建的目的。
自定义配置
@Configuration @Import(FeignClientsConfiguration.class) public class FeignClientConfig { @Bean public CustomizeFeignApi customizeFeignApi(Contract contract, Decoder decoder, Encoder encoder) { return Feign.builder().contract(contract).encoder(encoder).decoder(decoder).target(CustomizeFeignApi.class, "http://localhost:8004"); } }
@Configuration
:需要被消费者应用扫描到。
@Import(FeignClientsConfiguration.class)
:如果消费者上下文不存在Contract
, Decoder
, Encoder
,由FeignClientsConfiguration
提供默认bean。
以上,可封装为jar
,上传到公司nexus私服,有消费者下载使用。
服务消费者
依赖上文的jar。
<!--服务提供者--> <dependency> <groupId>com.wxs.springcloud</groupId> <artifactId>springcloud-sample-feign-provider-spi</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
注入使用。
@RestController public class CustomizeFeignTestController { @Autowired private CustomizeFeignApi customizeFeignApi; @GetMapping("/customize") public String query() { return customizeFeignApi.queryCustomize(); } }
启动类,添加扫描。 @ComponentScan("com.wxs.feign.provider.api")
验证
遇到的问题
Method not annotated with HTTP method type (ex. GET, POST)
Caused by: java.lang.IllegalStateException: Method queryCustomize not annotated with HTTP method type (ex. GET, POST) at feign.Util.checkState(Util.java:128) ~[feign-core-9.5.0.jar:na] at feign.Contract$BaseContract.parseAndValidateMetadata(Contract.java:97) ~[feign-core-9.5.0.jar:na] at feign.Contract$BaseContract.parseAndValidatateMetadata(Contract.java:64) ~[feign-core-9.5.0.jar:na] at feign.ReflectiveFeign$ParseHandlersByName.apply(ReflectiveFeign.java:146) ~[feign-core-9.5.0.jar:na] at feign.ReflectiveFeign.newInstance(ReflectiveFeign.java:53) ~[feign-core-9.5.0.jar:na] at feign.Feign$Builder.target(Feign.java:218) ~[feign-core-9.5.0.jar:na] at feign.Feign$Builder.target(Feign.java:214) ~[feign-core-9.5.0.jar:na] at com.wxs.feign.consumer.config.FeignClientConfig.customizeFeignApi(FeignClientConfig.java:38) ~[classes/:na]
feign.Feign.Builder
默认提供的是:new Contract.Default()
。
需要指定Contract
为SpringMvcContract
。
Feign.builder().contract(new SpringMvcContract()).target(CustomizeFeignApi.class, "http://localhost:8004")
参考
Creating Feign Clients Manually
Feign: Method not annotated with HTTP method type (ex. GET, POST)
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
"轻"量级 Java Web 服务框架漫谈
博文太长了, 还是先说下概要: 框架"轻量"与否可以从两方面来看待: 1) 框架本身的体量 - 例如小 jar 无依赖的苗条框架; 2) 用户使用框架是否获得各种便利而无阻隔("隔" 的含义参考王国维先生的人间词话) 单单"轻量"二字不足以说明框架的特性和使用方式 一定要说"轻量", 老码农倾向与第二种 - 用户使用框架是否获得各种便利而无阻隔 为了"轻量"而刻意使框架苗条化有时候不足取. tl;dr 以下博客正文 1. Java Web 服务框架的前世今生 时光回到 2000 年中, 老码农坐在天津河川大厦 7 楼接手平生第一个 Web 服务项目, 采用的是最新(当年)的 Java Servlet 技术, 倒腾着精致(自认为)的结构来处理 HttpServletResponse 输出 (幽怨地看向 N 年之后 Beetl, 却看不到 Rythm 的模样); 半年后第二个 web 项目开坑的时候, 从 apache jarkata 中挖出了一个名叫 Velocity 的模板, 果断放弃自己的输出框架; 再一年半之后的第三个项目(代号 kasino), 不说了, 直接上一整套 Apach...
- 下一篇
【AI实战】手把手教你文字识别(检测篇二:AdvancedEAST、PixelLink方法)
自然场景下的文字检测是深度学习的重要应用,在之前的文章中已经介绍过了在简单场景、复杂场景下的文字检测方法,包括MSER+NMS、CTPN、SegLink、EAST等方法,详见文章: 【AI实战】手把手教你文字识别(检测篇一: MSER、CTPN、SegLink、EAST方法) 今天将继续介绍复杂场景下基于深度学习的文本检测方法,手把手教你如何使用AdvancedEAST、PixelLink进行文本检测。 1、AdvancedEAST方法实战 在上一篇文本检测的AI实战文章中,介绍了EAST检测方式,取得了不错的检测效果,但是在长文本预测中效果还不是很理想。于是,有大牛对EAST检测方法进行了改进,获得了比EAST更好的预测准确性(特别是在长文本上),并开源了源代码,这就是AdvancedEAST方法。网络结构如下: AdvancedEAST的网络结构与EAST相似(EAST技术原理详见文章:大话文本检测经典模型EAST),但采用了VGG作为网络主干结构,基于Keras编写,在特征提取层中增加了后面卷积层的通道数量,对后处理方法也进行了优化。下面动手来试试AdvancedEAST的实际...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- 2048小游戏-低调大师作品
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8安装Docker,最新的服务器搭配容器使用
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池