# Feignless **Repository Path**: cmeet/feignless ## Basic Information - **Project Name**: Feignless - **Description**: 一个不需要创建FeignClient的Feign拓展框架,类似于Dubbo般的优雅调用。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 11 - **Forks**: 1 - **Created**: 2022-12-20 - **Last Updated**: 2023-07-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: solon, Spring, SpringCloud, feign ## README # Feignless #### 介绍 一个不需要创建FeignClient的Feign拓展框架,类似于Dubbo般的优雅调用。 你还在为使用Feign时,频繁创建Controller,频繁维护FeignClient而烦恼吗? 快来使用FeignLess吧,支持LoadBalance,FallBack,Retryer,TimeOut等部分原生特性。 #### 软件架构 基于Feign,支持LoadBalance等部分原生特性。 已适配:Solon Cloud ,Spring Cloud OpenFeign。 #### 使用说明 > 当前版本:revision 1.1.4 1. 服务端 1. 引入依赖 1. ```xml site.sorghum.feignless feignless-spring-boot-starter ${revision} site.sorghum.feignless feignless-solon-plugin ${revision} ``` 2. 在服务端的启动类上添加注解`@EnableFeignless(scanBasePackages = "site.sorghum.feignless.demo")` 3. 配置文件配置通信加密密钥,sm4密钥,可自行生成,长度为:16 1. ```yaml feignless: private-key: 123456781234123456 ``` 2. 客户端 1. 引入依赖 1. ```xml site.sorghum.feignless feignless-spring-boot-starter ${revision} site.sorghum.feignless feignless-solon-plugin ${revision} ``` 2. 在客户端的启动类上添加注解`@EnableFeignless` 3. 配置文件配置通信加密密钥,aes密钥,可自行生成 1. ```yaml feignless: private-key: 123456781234123456 ``` 4. 在需要调用的Service接口上添加注解`@FeignlessClient` 1. `@FeignlessClient`的`serviceName`属性为服务端的应用名,即Feign服务名 2. `@FeignlessClient`的`targetBeanName`属性为远程调用的对应的Bean名,即FeignClient的Bean名 3. `@FeignlessClient`的`serviceUrl`指定URL,则serviceName失效,直连不走负载均衡。 4. 额外配置,详见代码,支持fallback,feign原生超时,原生重试机制。 1. fallback中支持注入处理过的异常。 2. ```java @Setter Throwable cause; ``` 5. ```java @FeignlessClient(serviceName = "demo-server", solonGroup = "demo",targetBeanName = "demoService", serviceUrl = "http://localhost:8080") public interface DemoService { } // 一般来说,基于负载均衡的调用,不需要指定serviceUrl, // Solon 以下配置即可 solonGroup:nacos的group分区名 @FeignlessClient(serviceName = "demo-server", solonGroup = "demo",targetBeanName = "demoService") public interface DemoService { } // Spring 以下配置即可 @FeignlessClient(serviceName = "demo-server",targetBeanName = "demoService") public interface DemoService { } ``` 5. 注入接口对应的Bean即可使用 1. ```java // Spring @InjectFeignBean(targetBeanName = "testFeignClient",targetBeanType=UserService.class) private UserService userService; // Solon @Inject private UserService userService; ``` 2. ```java // Spring UserService userService = SpringUtil.getBean(UserService.class); // Solon UserService userService = Solon.context().getBean(UserService.class); ```