# springcloud-feign-reduce **Repository Path**: matea/springcloud-feign-reduce ## Basic Information - **Project Name**: springcloud-feign-reduce - **Description**: 将多个之间调用的springcloud feign调用的微服务,降级成打包成一个微服务,无需调整需要合并微服务之间的代码。 - **Primary Language**: Java - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 5 - **Created**: 2022-02-11 - **Last Updated**: 2022-02-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # springcloud-feign-reduce #### 介绍 将多个之间调用的springcloud feign调用的微服务,降级成打包成一个微服务,无需调整需要合并微服务之间的代码。 这样就可以在springcloud 和单体springboot之间任意切换,无需维护2套代码 #### 实现原理 参考feign的实现,同样实现动态代理,根据feign接口方法@RequestMapping找到对应调用controller的RequestMappingInfo,缓存后并unregisterMapping,获取到HandlerMethod反射调用controller对应的方法。此时的controller已经只具备service作用,不具备url访问的功能。 #### 使用方式 新建一个springboot项目,dependencies需要合并的微服务。然后dependencies此项目, 新建SpringBootApplication启动类,添加注解 @EnableFeignReduce(reducePackages = {"xx.abc.已经合并到一个项目内的feign包名"}) 如果合并的微服务含有SpringBootApplication启动类并注解了@EnableFeignClients,会出现bean重复初始化的问题,需要添加以下注解排除此启动类 @ComponentScan(excludeFilters = {@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = {需要排除的启动类})}) 还有一个问题,可能本身合并后又调用其他合并的微服务,但是由于合并多个微服务,服务名统一变成一个,需要添加配置转换调用服务名,配置如下: feign: reduce: conversions: 原微服务名1: 统一服务名 原微服务名2: 统一服务名 原微服务名3: 统一服务名 不过建议还是在新建feign接口的时候指定@FeignClient,name属性 使用springboot 占位符方式。 例如@FeignClient(name="${feign.authservice}")