SpringCloudAlibaba整合Feign实现远程HTTP调用的简单示例
目录
- 前言
- 环境
- 简单示例
- Feign 的组成和支持的配置项
- Feign 的组成
- Feign 支持的配置项
- Feign 的日志
- Feign 的日志级别
- 自定义配置 Feign 的日志级别
- 全局配置 Feign 的日志级别
- Feign 日志级别配置方式总结
- 项目源码
前言
Feign
是Netflix
开源的声明式HTTP
客户端,致力于让编写http client
更加简单,Feign
可以通过声明接口自动构造请求的目标地址完成请求环境
Spring Cloud Hoxton.SR9 + Spring Cloud Alibaba 2.2.6.RELEASE
Feign
是Netflix
公司产品,目前已停止更新,文章中使用的是OpenFeign
,是Spring
社区开发的组件简单示例 content-center
pom.xml
org.springframework.cloud spring-cloud-starter-openfeign
启动类
ContentCenterApplication.java
@EnableFeignClientspublic class ContentCenterApplication {}
TestController.java
import com.coisini.contentcenter.feignclient.TestFeignClient; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController@RequiredArgsConstructor(onConstructor = @__(@Autowired))public class TestController {private final TestFeignClient testFeignClient; /*** 整合Feign* @return*/@GetMapping("test4")public String test4() {return testFeignClient.test("Coisini"); }}
TestFeignClient.java
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; /** * @FeignClient(name = "user-center") * name 要请求的微服务的名称 */@FeignClient(name = "user-center")public interface TestFeignClient{/*** test接口被调用时,feign会构造出 url* http://user-center/test/{name} 完成请求* @param name* @return*/@GetMapping("/test/{name}")String test(@PathVariable String name); }
user-center
TestController.java
@RestController@Slf4jpublic class TestController {@GetMapping("/test/{name}")public String test(@PathVariable String name) {log.info("请求..."); return "hello " + name; }}
示例测试结果
文章图片
…至此,已完成
Feign
的整合Feign 的组成和支持的配置项
Feign 的组成
接口 | 作用 | 默认值 |
---|---|---|
Feign.Builder | Feign的入口 | Feign.Builder |
Client | Feign底层请求方式 | 和Ribbon配合时 LoadBalancerFeignClient 不和Ribbon配合时 feign.Client.Default |
Contract | 契约,注解支持 | SpringMvcContract |
Encoder | 编码器,用于将对象转换成HTTP请求消息体 | SpringEncoder |
Decoder | 解码器,将响应消息转换成对象 | ResponseEntityDecoder |
Logger | 日志管理器 | Slf4jLogger |
RequestInterceptor | 用于为每个请求添加通用逻辑 | 无 |
Feign 支持的配置项
配置项 | 作用 |
---|---|
Logger.Level | 指定日志级别 |
Retryer | 指定重试策略 |
ErrorDecoder | 指定错误解码器 |
Request.Options | 超时时间 |
Collection< RequestInterceptor> | 拦截器 |
SetterFactory | 用于设置Hystrix的配置属性,整合Hystrix才会生效 |
feign.client.config::connectTimeout: 5000 # 连接超时时间readTimeout: 5000 # 读取超时时间loggerLevel: full # 日志级别errorDecoder: com.example.SimpleErrorDecoder # 错误解码器retryer: com.example.SimpleRetryer # 重试策略requestInterceptors: com.example.FooRequestInterceptor # 拦截器decode404: false # 是否对404错误码解码encoder: com.example.SimpleEncoder # 编码器decoder: com.example.SimpleDecoder # 解码器contract: com.example.SimpleContract # 契约
Feign 的日志
Feign 的日志级别
feign
默认不打印任何日志级别 | 打印内容 |
---|---|
NONE(默认值) | 不记录任何日志 |
BASIC | 仅记录请求方法、URL、响应状态代码以及执行时间 |
HEADERS | BASIC级别的基础上,记录请求和响应的header |
FULL | 记录请求和响应的header、body和元数据 |
自定义配置 Feign 的日志级别
Java 代码配置方式
UserCenterFeignConfiguration.java
import feign.Logger; import org.springframework.context.annotation.Bean; /** * @Description 用户中心 Feign 配置类 */public class UserCenterFeignConfiguration {@Beanpublic Logger.Level level() {return Logger.Level.FULL; }}
UserCenterFeignClient.java
@FeignClient(name = "user-center", configuration = UserCenterFeignConfiguration.class)public interface UserCenterFeignClient { ...}
application.yml
logging:level:# feign 的日志级别是建立在接口日志级别基础上的com.coisini.contentcenter.feignclient.UserCenterFeignClient: debug
访问接口查看feign日志
文章图片
yml 属性配置方式
application.yml,实现效果同上
logging:level:com.coisini.contentcenter.feignclient.UserCenterFeignClient: debug# 自定义配置 feign 日志级别feign:client:config:# 调用的微服务名称user-center:loggerLevel: full
全局配置 Feign 的日志级别
Java 代码配置方式 GlobalFeignConfiguration.java
import feign.Logger; import org.springframework.context.annotation.Bean; /** * @Description Feign 全局配置类 */public class GlobalFeignConfiguration {@Beanpublic Logger.Level level() {// feign 日志级别 FULLreturn Logger.Level.FULL; }}
启动类ContentCenterApplication.java
@EnableFeignClients(defaultConfiguration = GlobalFeignConfiguration.class)@SpringBootApplicationpublic class ContentCenterApplication { ...}
application.yml
logging:level:com.coisini.contentcenter.feignclient.UserCenterFeignClient: debug
接口日志打印
文章图片
yml 属性配置方式 application.yml
# 自定义配置 feign 日志级别feign:client:config:# 全局配置default:loggerLevel: full
实现效果同上
Feign 日志级别配置方式总结
- 配置方式优先级:全局代码配置 < 全局属性配置 < 自定义代码配置(细粒度) < 自定义属性配置(细粒度)
- 建议尽量使用属性配置
项目源码 GitHub: https://github.com/Maggieq8324/coisini-cloud-alibaba
Gitee: https://gitee.com/maggieq8324/coisini-cloud-alibaba
【SpringCloudAlibaba整合Feign实现远程HTTP调用的简单示例】到此这篇关于SpringCloudAlibaba 整合 Feign 实现远程 HTTP 调用的文章就介绍到这了,更多相关SpringCloudAlibaba远程 HTTP 调用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- Spring|Spring Boot 整合 Activiti6.0.0
- springboot整合数据库连接池-->druid
- Spring|Spring Cloud Feign实现文件上传下载的示例代码
- SpringBoot整合MongoDB完整实例代码
- Springboot整合kafka的示例代码
- Spring|Spring Cloud Feign组件
- 15天蜕变之旅Day6~5月29日作业父母能量链接内在整合
- Spring|Spring Boot整合Mybatis进行CRUD
- Springboot整合RabbitMQ(三)——Topic主题交换机
- 变现学院第二次班会—资源整合