SpringCloud 基础教程:二、服务消费者 Feign

Feign 简介

Feign 是一个声明 web 服务客户端,这便得编写 web 服务客户端更容易。
———————————————————————————————————
使用Feign 创建一个接口并对它进行注解,它具有可插拔的注解支持包括 Feign 注解与 JAX-RS 注解,Feign 还支持可插拔的编码器与解码器。
———————————————————————————————————
Spring Cloud 增加了对 Spring MVC 的注解,Spring Web 默认使用了HttpMessageConverters, Spring Cloud 集成 RibbonEureka 提供的负载均衡的 HTTP 客户端 Feign

基于上篇 SpringCloud 基础教程:一、服务的注册与发现 的项目代码,我们继续新建模块 business-feign,其 pom.xml 内容如下:



    4.0.0

    
    
        pan
        spring-cloud-base
        0.0.1-SNAPSHOT
        ../../pom.xml
    

    pan.business
    business-feign
    0.0.1-SNAPSHOT
    business-feign
    SpringCloudLearning project for Spring Cloud

    jar

    
        
        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-client
        

        
        
            org.springframework.boot
            spring-boot-starter-web
        

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

        
        
            org.projectlombok
            lombok
        

        
        
            org.apache.commons
            commons-lang3
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin

                
                    
                    business-feign
                    
                    
                        /Users/panzhangbao/Documents/
                    
                
            
        
    


application.yml 内容如下:

# Feign是一个声明式的伪 Http 客户端,它使得写 Http 客户端变得更简单
#   Feign 采用的是基于接口的注解
#   Feign 整合了 ribbon,具有负载均衡的能力
#   整合了Hystrix,具有熔断的能力,它使得写Http客户端变得更简单
#
# 其实 business-feign 实际上也是一个 eureka-client 项目,可以代替 eureka-client 项目的

server:
  port: 9002

spring:
  application:
    name: business-feign

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

启动类 FeignApplication.java 中加入 @EnableFeignClients注解即可。具体代码如下:

package pan.business.feign;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;

// 开启 feign
@EnableFeignClients
@SpringBootApplication
public class FeignApplication {

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

}

Feign 的使用特别简单,只需写个接口,里面的方法和其他模块的接口方法一致即可,比如我们现在调用 eureka-client 模块的 home接口,其代码如下:

package pan.business.feign.feignclient;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * eureka-client 的 feignClient
 *
 * Created by panzhangbao on 2019-03-11 11:27:26
 * Copyright © 2019 panzhangbao. All rights reserved.
 */
@FeignClient("eureka-client")
public interface EurekaClientFeignClient {

    /**
     * 首页
     *
     * @param name 名字
     * @return java.lang.String
     * @date 2019/3/11 11:34
     * @author panzhangbao
     */
    @GetMapping("home")
    String home(@RequestParam(value = "name", required = false, defaultValue = "Jason Pan") String name);
}

这时候我们写个 controller,来调用此接口方法即可。这里我们新建 TestController.java,其代码如下:

package pan.business.feign.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import pan.business.feign.feignclient.EurekaClientFeignClient;

import javax.annotation.Resource;

/**
 * 首页 controller
 *
 * Created by panzhangbao on 2019-03-11 11:32:41
 * Copyright © 2019 panzhangbao. All rights reserved.
 */
@RestController
@RequestMapping("api/feign")
public class TestController {

    @Resource
    private EurekaClientFeignClient eurekaClientFeignClient;

    /**
     * 首页
     *
     * @param name 名字
     * @return java.lang.String
     * @date 2019/3/11 11:35
     * @author panzhangbao
     */
    @GetMapping
    public String test(@RequestParam(value = "name", required = false) String name) {
        return eurekaClientFeignClient.home(name);
    }

}

启动 business-feign 模块,在浏览器中输入http://localhost:9002/api/feign?name=BruceLee,其显示如下:

SpringCloud 基础教程:二、服务消费者 Feign_第1张图片
http://localhost:9002/api/feign?name=BruceLee

由此, feign 调用其他模块或接口成功。

SpringCloud 基础教程

SpringCloud 基础教程:一、服务的注册与发现
SpringCloud 基础教程:二、服务消费者 Feign
SpringCloud 基础教程:三、断路器 Hystrix 及其监控
SpringCloud 基础教程:四、路由网关

https://github.com/panzhangbao/SpringCloudLearning.git

参考

方志明的博客:史上最简单的SpringCloud教程 | 第三篇: 服务消费者(Feign)(Finchley版本)

你可能感兴趣的:(SpringCloud 基础教程:二、服务消费者 Feign)