SpringCloud学习八(SpringCloud微服务之服务调用Feign)

一、服务调用Feign简介

Feign是springcloud中的声明式服务调用组件,可以让开发者 只需要定义接口和配置注解,在调用接口方法时,Feign会根据注解配置 帮我们调用对应的目标服务和方法

二、Feign入门案例

(1)、导入依赖

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

(2)、Feign的客户端

创建接口

@FeignClient("user-service")  // 通过value属性指定服务名称
public interface UserFeignApi {
    @GetMapping("/user/{id}")
    public Map findById(@PathVariable("id") String username);
}
  • 首先这是一个接口,Feign会通过动态代理,帮我们生成实现类。这点跟mybatis的mapper很像
  • @FeignClient,声明这是一个Feign客户端,同时通过value属性指定服务名称
  • 接口中的定义方法,完全采用SpringMVC的注解,Feign会根据注解帮我们生成URL,并访问获取结果

新建FeignController,使用userFeignApi访问

@RestController
@RequestMapping("consumer")
public class ConsumerController {
    @Autowired
    UserFeignApi userFeignApi;
    @GetMapping("{id}")
    public Map queryById(@PathVariable("id") String id){
        return userFeignApi.findById(id);
    }
}

(3)、开启Feign功能

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

@SpringCloudApplication
@EnableFeignClients // 开启Feign功能
// RestTemplate的注册被我删除了。Feign中已经自动集成了Ribbon负载均衡
public class ConsumerDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(UserConsumerDemoApplication.class, args);
    }
}

三、负载均衡的支持

1、修改超时时长

Fegin内置的ribbon默认设置了请求超时时长,默认是1000ms
application.yml文件

ribbon:
  ReadTimeout: 2000 # 读取超时时长
  ConnectTimeout: 1000 # 建立链接的超时时长

2、重试机制

ribbon内部有重试机制,一旦超时,会自动重新发起请求。如果不希望重试,可以添加配置
application.yml文件中

ribbon:
  ConnectTimeout: 500 # 连接超时时长
  ReadTimeout: 1000 # 数据通信超时时长
  MaxAutoRetriesNextServer: 2 # 切换重试多少次服务
  MaxAutoRetries: 1 # 当前服务器的重试次数
  OkToRetryOnAllOperations: false # 是否对所有的请求方式都重试

四、Feign集成Hystix

默认是关闭的,需手动开启

application.yml文件中

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

定义一个类,实现刚才编写的UserFeignClient,作为fallback的处理类

@Component
public class UserFeignFallback implements UserFeignApi {
    @Override
    public Map findById(String username) {
        Map map = new HashMap();
        map.put("msg","对不起,网络出现异常请稍后重试");
        return map;
    }
}

在UserFeignClient中,指定刚才编写的实现类

@FeignClient(value = "user-service",fallback = UserFeignFallback.class)
public interface UserFeignApi {
    @GetMapping("/user/{id}")
    public Map findById(@PathVariable("id") String username);
}

五、日志调试

设置com.rrx.feign包下的日志级别为debug

logging:
  level:
    com.rrx.feign: debug 

编写配置类,定义日志级别

/**
 * Fegin的自动配置类
 */
@Configuration
// 提取出api的时候使用
// 扫描FeignClient注解
@EnableFeignClients(basePackages = "org.feign")
// 扫描Spring注解
@ComponentScan(basePackages = "org.feign")
public class FeginConfiguration {

    @Bean
    Logger.Level feginLoggerLever(){
        //- NONE:不记录任何日志信息,这是默认值。
        //- BASIC:仅记录请求的方法,URL以及响应状态码和执行时间
        //- HEADERS:在BASIC的基础上,额外记录了请求和响应的头信息
        //- FULL:记录所有请求和响应的明细,包括头信息、请求体、元数据。
        // 定义fegin的输出日志级别
        return Logger.Level.FULL;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值