springcloud学习 第四章:服务调用feign

下载源码:https://gitee.com/ctocloud/spring-cloud-poetry.git

1、Feign定义

           Feign 是服务客户端的声明,使用Feign创建一个接口并注解就能很简单的实现服务调用。

这样的设计使得调用更加简单优雅。Feign支持可拔插的编码解码器。

Feign默认集成了Ribbon,自带负载均衡的功能。

Feign整合了Hystrix,可以很方便的实现熔断功能。

2、Feign例子

例子源码请参见:

 

首先pom文件需要增加依赖 spring-cloud-starter-openfeign,其配置文件 application.yml 不需要改动。

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

 


一、启动程序  加入注解:@EnableFeignClients

@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
@EnableFeignClients
public class FeignApplication {

    public static void main(String[] args) {
        SpringApplication.run(FeignApplication.class, args);
    }

}



二、注入service,传入调用参数

@RestController
public class HelloController {

    @Autowired
    IHelloService helloService;

    @GetMapping(value = "hello")
    public String hello(@RequestParam String name){
        return helloService.hello(name);
    }
}



三、FeignClient服务端调用。(包含了Hystric熔断和RestTemplate的Ribbon算法等)

代码IHelloService.java,注解 @FeignClient value 值填写客户端名称,
作用是去注册中心查找服务然后负载均衡。
这里可以填写服务提供者cloud-service。也可以通过URL属性来指定URL。
然后定义接口hello,在@RequestMapping 的value填写的是需要远程调用REST接口的路径。

自定义配置,注解可以通过 @FeignClient(configuration = FooConfiguration.class)
来配置自定义的配置,这样会覆盖默认的配置值。
FooConfiguration 可以配置 feign.Decoder,feign.Encoder和feign.Contract,
注意不需要 @Configuration注解。

@FeignClient(value = "cloud-service", fallback = HelloServiceHystric.class)
public interface IHelloService {

    @RequestMapping(value = "api-a/hello", method = RequestMethod.GET)
    String hello(@RequestParam(value = "name") String name);
}



3、Feign 对 Hystrix 的支持     



首先在 application.yml 中开启 hysteria 的功能;
然后在@FeignClient(fallback = HelloServiceHystric.class) 中配置。
然后HelloServiceHystric 实现 IHelloService 接口,
接口中实现的 hello 方法就是异常情况下断路器的返回。
这时候启动 cloud-consumer-feign项目,down掉服务提供者 cloud-service,
用浏览器访问hello接口会看到效果 “feign, error”。


配置文件中增加:
feign:
  hystrix:
    enabled: true



@Component
public class HelloServiceHystric implements IHelloService {

    @Override
    public String hello(@RequestParam(value = "name") String name) {
        return "feign, error";
    }
}

4、启动测试:

      这时候启动 cloud-consumer-feign项目,down掉服务提供者 cloud-service,
用浏览器访问hello接口会看到效果 “feign, error”。

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值