Spring Cloud入门与实践(四)-Feign

本文介绍Feign声明式服务调用的概念及其在Spring Cloud中的应用。通过整合Spring Cloud Ribbon与Hystrix,Feign提供了简洁的服务客户端定义方式。文章详细展示了如何配置Feign并实现基于Eureka的服务发现与负载均衡。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Feign是什么呢?声明式服务调用,记得在使用Ribbon负载均衡时候,需要用到一个RestTemplate来进行调用,而有了Feign,可以直接写类似于Controller的方式来进行一个声明式的服务调用了。

Feign

Feign基于Netflix Feign实现,整合了Spring Cloud Ribbon与Spring Cloud Hystrix,除了提供这两者的强大功能外,它还提供了一种声明式的Web服务客户端定义方式。
下面看一个例子。

pom文件

首先是pom文件,引入eureka和feign即可:

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

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

FeignClient的接口

Feign里面声明式的调用,通过在接口上用注解配置,如果失败了,则会调用fallback指定的类的同名方法,一般是实现一个子类进行容错。
下面看FeignService类:

@FeignClient(name="hello-service",fallback = FeignServiceFallback.class)    
//此处name为eureka中注册实例名,feign会默认基于ribbon的负载均衡
public interface FeignService {
    @RequestMapping("/hello")
    public String hello();
}

下面再看FeignServiceFallback:

@Component
public class FeignServiceFallback implements FeignService {
    @Override
    public String hello() {
        return "hello error";
    }
}

启动类

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

在启动类上,加上@EnableFeignClients 开启Feign服务。

application.yml

server:
  port: 8082                        #端口

spring:
  application:
    name: feign-service                                    #为服务命名

feign:
  hystrix:
    enabled: true                                        #一定要手动配置hystrix,默认feign是不开启hystrix服务的
eureka:
  client:
    serviceUrl:
      defaultZone: http://${eureka.host:localhost}:${eureka.port:8761}/eureka/

注意一定要手动将feign.hystrix.enabled设为true,否则关闭hello-service时候,将不会触发容错。

当启动eureka,hello-service,feign应用时,访问http://localhost:8082/feign-consumer
这里写图片描述

而此时关闭hello-service,则会得到如下访问结果:
这里写图片描述

当然上面,只是简单搭建了一个Feign环境,对于声明式服务调用对应与http访问配置参数,继承等。
同时,可以在application.yml中配置相应的ribbon配置。

代码在hello-springcloud 的v4分支

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值