Spring Cloud学习--声明式调用(Feign)

本文目录:

    • 一 Feign简介
    • 二 实现声明式REST调用
    • 三 Feign继承特性
    • 四 Feign多参配置
      • 1 以get请求为例
      • 2 以post请求为例

一、 Feign简介

在介绍Ribbon的时候,使用了RestTemplate实现了接口调用,但该方法传入的参数只有一个,但在实际业务中,我们可能需要传入多个参数,那该怎么解决呢?Feign就是解决这个问题的。

Feign是Netflix开发的声明式、模板化的Http客户端,Spring Cloud Fegin支持Spring MVC注解,整合了Ribbon和Hystrix,我们只需要创建一个接口,并用注解的方式配置即可。

二、 实现声明式REST调用

1.新建一个Spring boot 工程,添加spring-cloud-starter-feign依赖。

<dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-feignartifactId>
            <version>LATESTversion>
dependency>
<dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-eurekaartifactId>
dependency>

2.启动类添加@EnableFeignClients注解

@EnableDiscoveryClient
@EnableFeignClients
@SpringBootApplication
public class SpringCloudFeignApplication {

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

3.创建一个Fegin接口,并添加@FeignClient注解

@FeignClient(name="string-service")
public interface UserService {

    @RequestMapping("/hi")
    String hello();

}

4.修改Controller类,调用接口。

@RestController
public class UserController {

    @Autowired
    UserService userService;

    @RequestMapping("/access")
    public String helloBoy(){
        return userService.hello();
    }
}

5.配置文件

server.port=8674
eureka.client.serviceUrl.defaultZone=http://localhost:8888/eureka/

6.启动项目,访问http://localhost:8674/access,出现如图所示界面

Spring Cloud学习--声明式调用(Feign)_第1张图片

三、 Feign继承特性

Feign支持继承,使用继承,可以将一些公共接口都写在父接口中。通常情况下,不建议在服务器端和客户端之间共享接口

四、 Feign多参配置

以post请求和get请求构造Feign的多参配置

4.1 以get请求为例:

@FeignClient(name = "string-service")
public interface UserService {

   //1.最直接的方式,url有几个参数,Feign接口中就有几个参数。使用@RequestParam注解指定参数
    @RequestMapping(value = "/hello1", method = RequestMethod.GET)
    public String get(@RequestParam("firstName") String firstName, @RequestParam("lastName") String lastName);

   //2.多参数的url也可以用map来构建
    @RequestMapping(value = "/hello2", method = RequestMethod.GET)
    public String get(@RequestParam Map map);
}

4.2 以post请求为例:

@FeignClient(name = "string-service")
public interface UserService {

    @RequestMapping(value = "/hello3", method = RequestMethod.POST)
    public String get(@RequestBody String user);

}

你可能感兴趣的:(Spring,Cloud)