前言
本篇博文是关于SpringCloud OpenFeign的基本介绍,希望你能够喜欢
个人主页:晨犀主页
个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动力
欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看
如果文章有什么需要改进的地方还请大佬不吝赐教 先在此感谢啦
官网地址:https://github.com/spring-cloud/spring-cloud-openfeign
精简一句话:OpenFeign 就是在Feign 基础上做了加强, 有些程序员为了方便,说Feign 就是指的OpenFeign
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-openfeignartifactId>
dependency>
3.创建application.yml 内容如下:
server:
port: 80
spring:
application:
name: e-commerce-consumer-openfeign-80
#配置eureka-client
eureka:
client:
register-with-eureka: true #将自己注册到Eureka-Server
fetch-registry: true
service-url:
#表示将自己注册到哪个eureka-server
#这里我们将本微服务注册到EurekaServer 集群,使用逗号间隔
defaultZone: http://eureka9001.com:9001/eureka,http://eureka9002.com:9002/eureka
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@EnableEurekaClient
@EnableFeignClients
public class MemberConsumerOpenfeignApplication80 {
public static void main(String[] args) {
SpringApplication.run(MemberConsumerOpenfeignApplication80.class, args);
}
}
@Component
@FeignClient(value = "MEMBER-SERVICE-PROVIDER")
public interface MemberFeignService {
//这里定义方法-就是远程调用的接口
/**
* 1. 远程调用的方式是get
* 2. 远程调用的url http://MEMBER-SERVICE-PROVIDER/member/get/{id}
* 3. MEMBER-SERVICE-PROVIDER 就是服务提供方在Eureka Server 注册的服务
* 4. openfeign 会根据负载均衡来决定调用10000/10002-默认是轮询
* 5. 因为openfeign 好处是支持了springmvc注解 + 接口解耦
*/
@GetMapping("/member/get/{id}")
public Result getMemberById(@PathVariable("id") Long id);
}
@RestController
public class MemberConsumerFeignController {
//装配MemberFeignService
@Resource
private MemberFeignService memberFeignService;
@GetMapping(value = "/member/consumer/openfeign/get/{id}")
public Result getMemberById(@PathVariable("id") Long id) {
return memberFeignService.getMemberById(id);
}
}
@GetMapping(value = "/member/get/{id}")
public Result<Member> getMembertById(@PathVariable("id") Long id);
Feign 提供了日志打印功能,可以通过配置来调整日志级别,从而对Feign 接口的调用情况进行监控和输出
NONE∶默认的,不显示任何日志
BASIC∶仅记录请求方法、URL、响应状态码及执行时间;
HEADERS∶除了BASIC中定义的信息之外,还有请求和响应的头信息;
FULL∶除了HEADERS中定义的信息之外,还有请求和响应的正文及元数据。
@Configuration
public class OpenFeignConfig {
@Bean
public Logger.Level loggerLevel() {
return Logger.Level.FULL;
}
}
常见的日志级别有5 种,分别是error、warn、info、debug、trace
error:错误日志,指比较严重的错误,对正常业务有影响,需要运维配置监控的;
warn:警告日志,一般的错误,对业务影响不大,但是需要开发关注;
info:信息日志,记录排查问题的关键信息,如调用时间、出参入参等等;
debug:用于开发DEBUG 的,关键逻辑里面的运行时数据;
trace:最详细的信息,一般这些信息只记录到日志文件中。
logging:
level:
#对MemberFeignService 接口调用过程打印信息-Debug
com.my.springcloud.service.MemberFeignService: debug
浏览器: http://localhost/member/consumer/openfeign/get/1
@GetMapping("/member/get/{id}")
public Result getMemberById(@PathVariable("id") Long id, HttpServletRequest request) {
try {
TimeUnit.MILLISECONDS.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Member member = memberService.queryMemberById(id);
//使用Result把查询到的结果返回
if (member != null) {
//return Result.success("查询会员成功 member-service-provider-10000 " + color + "-" + address, member);
return Result.success("查询会员成功 member-service-provider-10000", member);
} else {
return Result.error("402", "ID= " + id + "不存在");
}
}
2.浏览器访问http://localhost/member/consumer/openfeign/get/1
OpenFeign 默认超时时间1 秒钟,即等待返回结果1 秒
说明: 在某些情况下,一个服务调用时间可能要超过1 秒,就需要重新设置超时时间
ribbon:
#1. 设置feign客户端超时时间(openfeign默认支持ribbon)
#2. ReadTimeout: 8000: 建立连接从服务提供方获取可用资源的所用的全部时间
#3. 时间单位是毫秒
ReadTimeout: 8000
#两端连接所用时间
ConnectionTimeout: 8000
文章到这里就结束了,如果有什么疑问的地方请指出,诸大佬们一起来评论区一起讨论
希望能和诸大佬们一起努力,今后我们一起观看感谢您的阅读
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力