SpringCloud-笔记5-中服务间两种调用方式-Feign

Feign说明

  • feign内部也是用Ribbon做负载均衡
  • 声明式REST客户端(伪RPC),类是Android 的Retrofit调用方式
  • 采用了基于接口的注解

描述现有wechatTask-guns中已经有helloWorld服务getToken服务

helloWorld访问无需带参数

http://127.0.0.1:8089//wechatTask//study/helloWorld

返回数据格式


SpringCloud-笔记5-中服务间两种调用方式-Feign_第1张图片
image.png

在SpringCloud调用方msnSns模块的pom.xml中添加依赖

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

在调用方的启动类添加注解

@EnableFeignClients
SpringCloud-笔记5-中服务间两种调用方式-Feign_第2张图片
image.png

定义一个Feign接口(访问其他服务的接口,有点类似RetrofitClient)

/**
 * 升级Spring Boot 2.1.0 Spring Cloud Greenwich.M1  版本后,在2个Feign接口类内定义相同的名字,  @FeignClient(name = 相同的名字 就会出现报错
 * https://blog.csdn.net/ankeway/article/details/83892752
 */
@FeignClient(name = "wechat-task") //name的值是Eureka注册的服务接口
public interface HelloWorldClient {
    @GetMapping("wechatTask/study/helloWorld") //访问的路径
    String helloWorld();


    @GetMapping("wechatTask/api/getToken") //访问的路径
    IJSONResult getToken(@RequestParam String username,@RequestParam String  password,@RequestParam String  type,@RequestParam String  clientType);

}

创建一个controller进行测试HelloWorldFeignClientController


/**
 * 主要用于模拟Feign的远程调用参数种使用方式,配合@FeignClient的接口
 */

@Controller
@RequestMapping()

public class HelloWorldFeignClientController {
    Logger logger = LoggerFactory.getLogger(HelloWorldFeignClientController.class);

    @Autowired
    private HelloWorldClient helloWorldClient;//这是一个定义Feign客户端的接口



    //模拟没有参数的情况
    @GetMapping("/helloworldFeignClient")
    @ResponseBody
    public String helloworldClient(){

        String response = helloWorldClient.helloWorld();
        logger.info("响应的数据response= {}",response);
        return response;
    }



    //模拟传递惨的例子
    @GetMapping("/helloworldGetTokenFeignClient")
    @ResponseBody
    //第一种情况(直接使用restTemolate,url写死
    public IJSONResult getToken(@RequestParam String username, @RequestParam String  password, @RequestParam String  type, @RequestParam String  clientType){
        //IJSONResult ijsonResult = helloWorldClient.getToken("867463020550111","aaa6a6f01e519ea0253b7e884b3ae783a","10","10");
        IJSONResult ijsonResult = helloWorldClient.getToken(username,password,type,clientType);
        logger.info("响应的数据response= {}", JSONObject.toJSONString(ijsonResult));

        return ijsonResult;
    }

}

运行测试

SpringCloud-笔记5-中服务间两种调用方式-Feign_第3张图片
image.png
http://localhost:8080//helloworldFeignClient

SpringCloud-笔记5-中服务间两种调用方式-Feign_第4张图片
helloworldFeignClient没参数
http://localhost:8080/helloworldGetTokenFeignClient?username=867463020550111&password=aaa6a6f01e519ea0253b7e884b3ae783a&type=10&clientType=10

SpringCloud-笔记5-中服务间两种调用方式-Feign_第5张图片
helloworldGetTokenFeignClient带参数

参考文献
Spring Cloud中如何优雅的使用Feign调用接口
FeignClient注解及参数

你可能感兴趣的:(SpringCloud-笔记5-中服务间两种调用方式-Feign)