SpringCloud学习使用(二)——openFeign

openFeign介绍

Feign是一个声明式的Web Service客户端。它的出现使开发Web Service客户端变得很简单。使用Feign只需要创建一个接口加上对应的注解,比如:FeignClient注解。Feign有可插拔的注解,包括Feign注解和JAX-RS注解。
Feign也支持编码器和解码器,Spring Cloud Open Feign对Feign进行增强支持Spring MVC注解,可以像Spring Web一样使用HttpMessageConverters等。
Feign是一种声明式、模板化的HTTP客户端。在Spring Cloud中使用Feign,可以做到使用HTTP请求访问远程服务,就像调用本地方法一样的,开发者完全感知不到这是在调用远程方法,更感知不到在访问HTTP请求。

openFeign功能

1.可插拔的注解支持,包括Feign注解和JAX-RS注解。
2.支持可插拔的HTTP编码器和解码器(Gson,Jackson,Sax,JAXB,JAX-RS,SOAP)。
3.支持Hystrix和它的Fallback。
4.支持Ribbon的负载均衡。
5.支持HTTP请求和响应的压缩。
6.灵活的配置:基于 name 粒度进行配置
7.支持多种客户端:JDK URLConnection、apache httpclient、okhttp,ribbon)
8.支持日志
9.支持错误重试
10.url支持占位符
11.可以不依赖注册中心独立运行

openFeign使用

openFeign所需的依赖,在服务调用方即消费者方主启动类上添加@EnableFeignClients注解使用openFeign的功能

<!--openfeign-->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

这里是消费者微服务yml文件所需要添加的配置

#设置feign客户端超时时间(OpenFeign默认支持ribbon)
ribbon:
  #指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间
  ReadTimeout: 5000
  #指的是建立连接后从服务器读取到可用资源所用的时间
  ConnectTimeout: 5000

logging:
  level:
    # feign日志以什么级别监控哪个接口
    com.springcloud.service.PaymentFeignService: debug

需要声明一个微服务消费者和生产者,消费者使用openFeign远程调用生产者的方法

/**
* 声明一个远程调用方法的接口,这个方法是存在于方法消费者项目里面
*/
@Component // 必须注入到spring容器中
@FeignClient("CLOUD-PAYMENT-SERVICE")//代表用微服务名字进行调用
public interface PaymentFeignService {
	/**
     * 当前的这个方法的方法名, @GetMapping注解,参数,要和生产者面的方法一一对应
     * 如果使用的是对象入参一定要使用@ResquestBody注解
     */
    @GetMapping("/payment/get/{id}")
    public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id);
	@GetMapping("/payment/get/")
	public CommonResult<Payment> getPaymentById(@ResquestBody Payment payment);
}

这里是方法生产者项目里面的方法

@GetMapping("/payment/get/{id}")
public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id) {
    Payment payment = paymentService.getPaymentById(id);

    if(payment != null)
    {
        return new CommonResult(200,"查询成功,serverPort: "+serverPort,payment);
    }else{
        return new CommonResult(444,"没有对应记录,查询ID: "+id,null);
    }
}
@GetMapping("/payment/get/")
public CommonResult<Payment> getPaymentById(@ResquestBody User user){
		Payment payment = paymentService.getPayment;
		return new CommonResult(200,"查询成功,serverPort: "+serverPort,payment);
};
/**
* 这个配置类添加可以打印FeignConfig调用远程方法的日志
*/
@Configuration
public class FeignConfig {

    @Bean
    Logger.Level feignLoggerLevel()
    {
        return Logger.Level.FULL;
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

麦片王子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值