SpringCloud系列之Feign声明式调用【待完善】

本文介绍了如何使用Spring Cloud Feign简化Web服务客户端的编写,包括引入依赖、配置YAML文件、创建Feign接口以及配置重试器。通过一个实例展示了如何调用远程服务并实现负载均衡,当远程调用失败时,Feign会根据配置的重试器进行重试。
摘要由CSDN通过智能技术生成

1. 简介

Feign是一个声明式的Web服务客户端,使用Feign可使得Web服务客户端的写入更加方便.它具有可插拔注释支持,包括Feign注解和JAX-RS注解、Feign还支持可插拔编码器和解码器、Spring Cloud增加了对Spring MVC注释的支持,并HttpMessageConverters在Spring Web中使用了默认使用的相同方式。Spring Cloud集成了Ribbon和Eureka,在使用Feign时提供负载平衡的http客户端。Fegin对Robbin进行了封装,如果需要配置自己的负载算法,可以自定义Ribbon的算法即可。 Spring Cloud Feign 提供的声明式服务绑定功能来实现对该服务接口的调用。

2. 实例

引入pom

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

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

引入application.yml

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/


server:
  port: 8765

spring:
  application:
    name: eureka-feign-client

程序启动类上打上注解@EnableFeignClients

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class EurekaFeignClientApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaFeignClientApplication.class,args);
    }
}

通过如上三个步骤就初步的具备了feign的功能了,我们结合之前的实例来做一个简单的Feign Client
首先新建一个EurekaFeignClient接口

@FeignClient(value="eureka-client",configuration = FeignConfig.class)
public interface EurekaClientFeign {

    @RequestMapping("/hello")
    String sayHiFromFeignClient(@RequestParam(value="name") String name);
}

这个接口是我们用来调用远程服务,value是远程调用其他服务的服务名。即调的远程服务的hello方法
然后配置FeignConfig配置类

@Configuration
public class FeignConfig {

    @Bean
    public Retryer feignRetryer(){
        return new Retryer.Default(100,SECONDS.toMillis(1),5);
    }
}

Configuration注解代表这是个注解类,注入了BeanName为feignRetryer的Retryer的Bean,这样Feign在远程调用失败之后会重试。

Service注入EurekaClientFeign的Bean,通过eurekaClientFeign来调用sayHiFromFeignClient方法

@Service
public class FeignService {
    @Autowired
    EurekaClientFeign eurekaClientFeign;

    public String sayHi(String name){
        return eurekaClientFeign.sayHiFromFeignClient(name);
    }
}

最后补上controller方法

@RestController
public class FeignController {
    @Autowired
    FeignService feignService;

    @RequestMapping("/hi")
    public String syaHi(@RequestParam String name){
        return feignService.sayHi(name);
    }
}

这样每次http://localhost:8765/hi?name=llf
页面轮替呈现出

hi , my port is 8762,my name is llf
hi ,my port is 8763 , my name isllf

3. 源码解析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值