SpringCloud组件之Feign远程调用

上篇文章运用SpringCloud组件Eureka简单写了个服务注册Demo,并用RestTemplate实现了服务之间的远程调用,这篇文章则用到SpringCloud的另一个组件Feign来实现更方便更优雅的远程调用。

首先引入maven依赖


        
            org.springframework.cloud
            spring-cloud-starter-openfeign
        

接着需要在启动类上加上@EnableFeignClients注解,开启远程调用功能

package com.wl.order;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;

/**
 * @author wl
 * @date 2022/3/4 14:22
 */
@EnableFeignClients
@MapperScan("com.wl.order.mapper")
@SpringBootApplication
public class OrderApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
        System.out.println("o(* ̄▽ ̄*)o启动成功!!!(〃'▽'〃)");
    }
}

然后创建调用用户模块的接口

package com.wl.order.clients;

import com.wl.order.config.DefaultFeignConfiguration;
import com.wl.user.entiry.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

/**
 * @author wl
 * @date 2022/3/6 11:38
 */
@FeignClient(value = "user-service", configuration = DefaultFeignConfiguration.class)
public interface UserServiceClient {

    @GetMapping("/user/{id}")
    User getById(@PathVariable("id") Long id);
}

@FeignClient标签的常用属性如下:

name:指定FeignClient的名称,如果项目使用了Ribbon,name属性会作为微服务的名称,用于服务发现

vaule和name 其实是一个属性
url: url一般用于调试,可以手动指定@FeignClient调用的地址
decode404:当发生http 404错误时,如果该字段位true,会调用decoder进行解码,否则抛出FeignException
configuration: Feign配置类,可以自定义Feign的Encoder、Decoder、LogLevel、Contract
fallback: 定义容错的处理类,当调用远程接口失败或超时时,会调用对应接口的容错逻辑,fallback指定的类必须实现@FeignClient标记的接口
fallbackFactory: 工厂类,用于生成fallback类示例,通过这个属性我们可以实现每个接口通用的容错逻辑,减少重复的代码
path: 定义当前FeignClient的统一前缀,当我们项目中配置了server.context-path,server.servlet-path时使用

其中DefaultFeignConfiguration这个类里定义了feign的日志级别,级别可根据自身情况定义,一般BASIC即可。

package com.wl.order.config;

import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author wl
 * @date 2022/3/6 13:57
 */
@Configuration
public class DefaultFeignConfiguration {

    @Bean
    public Logger.Level loggerLevel() {
        return Logger.Level.BASIC;
    }
}

本来参考黑马程序员的视频以为写到这里就可以在控制台看到feign的日志了,但结果却不是,百度之后发现还要在配置文件里加上这一段

## 将Feign接口的日志级别设置成DEBUG,因为Feign的logger.Level只对DEBUG做出响应
logging:
  level:
    com.wl.order.clients.UserServiceClient: debug

到此,每次远程调用即可输出日志查看调用情况了

SpringCloud组件之Feign远程调用_第1张图片

 

你可能感兴趣的:(SpringCloud,java,spring,cloud,java)