SpringCloud-----Feign
  TEZNKK3IfmPf 2023年11月14日 15 0

Feign

1.简介

        Feign是一种声明式、模板化的HTTP客户端。   在SpringCloud中使用Feign,我们可以把Rest的请求进行隐藏,伪装成类似SpringMVC的Controller一样,做到使用HTTP请求远程服务时能与调用本地方法一样的编码体验,开发者完全感知不到这是远程方法,更感知不到这是个HTTP请求。

2.快速入门

    •导入依赖

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-openfeign</artifactId>

</dependency>

   •编写Fegin的客户端

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import javax.servlet.http.HttpServletRequest;
import java.util.Random;


@FeignClient(value="service",path="/test")
public interface DataFeign {
    @GetMapping
   
public ResponseEntity<String> test();
}

        1.通过@FeignClient 声明Feign客户端。

            ① value:用于设置服务名称

            ② path:用于设置路径的前缀(也就是controller类上配的路径)

        2.Feign类似于MyBatis.

            ① @FeignClient类似于 @Mapper注解

            ② Feign是一个接口,可以通过动态代理来帮我们生成实现类.这就跟mybatis的mapper类似

        3.Feign接口中定义的方法,完全采用SpringMVC的注解,Feign中的方法需要与服务的方法声明完全一致,

            Feign会根据注解帮我们生成URL,访问并获取结果.

    •在服务调用方注入DataFeign

    @Resource
    private DataFeign dataFeign; 

   •开启Feign功能

    在启动类上,添加注解,开启Feign功能

@EnableFeignClients    

 •运行测试

3.整合Ribbon

Feign中本身已经集成了Ribbon依赖,不需要额外引入依赖,就可以完成负载均衡处理。

可以通过ribbon.xx来进行全局配置。也可以通过服务名.ribbon.xx来对指定服务配置,例举局部:

user-service:
  ribbon:
    ConnectTimeout: 250 # 连接超时时间(ms)
    ReadTimeout: 1000 # 通信超时时间(ms)
    OkToRetryOnAllOperations: true # 是否对所有操作重试
    MaxAutoRetriesNextServer: 1 # 同一服务不同实例的重试次数
    MaxAutoRetries: 1 # 同一实例的重试次数

4.Hystix支持

Feign默认也有对Hystix的集成,只不过,默认情况下是关闭的。

我们需要通过下面的参数来手动开启:

feign:

     hystrix:

        enabled: true # 开启Feign的熔断功能

    •编写DataFeign的实现,作为fallback的处理类

import org.springframework.stereotype.Component;            

@Component
public class DataFeignFallback implements DataFeign{
    @Override
    public String consume(Long id) {
        return "信息查询出现异常!";
    }
}                                                                

   •DataFeign接口中,指定刚才编写的实现类

@FeignClient(value="service",path="/test",fallback = DataFeignFallback.class)
public interface DataFeign {
    @GetMapping
   
public ResponseEntity<String> test();
}

    •重启测试

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月14日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2023年11月14日   16   0   0 springcloud
  TEZNKK3IfmPf   2024年04月19日   12   0   0 springcloud
TEZNKK3IfmPf