天天看点

springcloud组件之一:feign(client)一、Feign实现声明式REST调用

前提:创建好eureka-server,一套provider-consumer,注册到Eureka注册中心。

springcloud组件之一:feign(client)一、Feign实现声明式REST调用

一、Feign实现声明式REST调用

1.Feign简介

HTTP客户端
声明式、模板化
支持Spring MVC注解
           

Feign是Netflix开发的声明式,模板化的HTTP客户端,其灵感来自Retrofit,JAXRS-2.0以及WebSocket.

  • Feign可帮助我们更加便捷,优雅的调用HTTP API。
  • 在SpringCloud中,使用Feign非常简单——创建一个接口,并在接口上添加一些注解,代码就完成了。
  • Feign支持多种注解,例如Feign自带的注解或者JAX-RS注解等。
  • SpringCloud对Feign进行了增强,使Feign支持了SpringMVC注解,并整合了Ribbon和Eureka,从而让Feign的使用更加方便。

2.Feign实现微服务接口调用

准备

注册两个微服务:Provider和Consumer

实现Consumer对Provider的接口调用

2.1 Provider创建服务方法

在provider 中添加UserService类,提供login()方法

@RestController
public class Userservice {
    @RequestMapping(value = "/login")
    public String login(){
        return "登录成功1";
    }
}
           

2.2 Consumer进行调用准备

在consumer项目pom中添加Feign依赖

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-feign</artifactId>
            <version>1.3.5.RELEASE</version>
</dependency>
           

2.3 consumer添加client、service、controller类

(因为使用的是feign组件,所以consumer不能直接调provieder,要通过client类来进行调用)

2.4 编写client类

client中的接口是和provider项目中Controller类的接口一样:就Url和参数列表一样就可以, 其他的可以不一样。

为接口添加@FeignClient注解并指定name属性值为provider项目的名称。

@FeignClient(name = "eureka-provider-demo",fallback = UserFallBack.class)
public interface UserClient {
    @RequestMapping(value = "/login")
    public String login();
}
           

2.5 consumer中创建的UserServicImpl类调用userClient。

consumer中的Controller类调用service。

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserClient userClient;

    @Override
    public String login() {
        return userClient.login();
    }
}
           
@RestController
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping(value = "/login")
    public String login(){
        return userService.login();
    }
}
           

2.6 consumer项目的启动类添加注解:@EnableDiscoveryClient、@EnableFeignClients

2.7 访问provider中接口的URL和consumer中接口的URL,成功。

springcloud组件之一:feign(client)一、Feign实现声明式REST调用

内容太多了 我做了模块内容分离,springcloud的5个组件:feign、hystrix、ribbon、zuul、config都有博文分别介绍,如有需要请查看:

springcloud组件之一:feign(client)

springcloud组件之二:hystrix(容错&Hystrix处理容错&Feign项目的监控&Hystrix Dashboard可视化监控&Turbine聚合监控)

springcloud组件之三:Ribbon(轮询和随机负载)

springcloud组件之四:Zuul(zuul网关&网关过滤器)

springcloud组件之五:Config实现分布式配置

继续阅读