SpringCloud之Feign

Posted Firm陈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloud之Feign相关的知识,希望对你有一定的参考价值。

1.简介
微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的。Spring cloud有两种服务调用方式,一种是ribbon+restTemplate,另一种是feign。

2.什么是feign
既然一个系统被拆分成了无数个子系统,那系统之间是如何进行通信的呢?假如我现在在订单系统中想获取到会员的信息,此时,你能怎么做?
可能你会说用外链接查询,这个也没啥错,但是正规的分布式系统都是将对应的表分给了对应的库,所以这里链接查询是走不通的,这时,你可能在想,要是我能直接调用会员服务的方法那该多好,Feign就来了,他解决了服务与服务之间的通讯。
Feign是一种声明式、模板化的HTTP客户端。在Spring Cloud中使用Feign, 我们可以做到使用HTTP请求远程服务时能与调用本地方法一样的编码体验,开发者完全感知不到这是远程方法,更感知不到这是个HTTP请求,类似于Dubbo的RPC。

注意: 如果想实现服务与服务之前的调用,那么必须要有eureka这个注册中心

3.Maven依赖

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

4.代码示例
(1)如果你要调用的是第三方接口你可以这样写

//完整url=https://test.cn/user/auth?token=
//然后再自己控制器里面调用此接口就完成了
@FeignClient(name = "test", url = "https://test.cn")
public interface FeignService {
    @RequestMapping(method = RequestMethod.POST, value = "/user/auth",consumes = "application/x-www-form-urlencoded;charset=UTF-8")
    String ssoCheck(String token);
}

(2)如果是调用自己Eureka上服务的接口


//服务名=serviceid,也就是你需要调用接口的服务名
//调用方
//然后你在你自己的控制器里面调用此接口。就完成了一次使用feign调用
@FeignClient(value="被调用方的服务名")
public interface UserAuthService {
    @RequestMapping(method = RequestMethod.GET, value = "/user/auth")
    String userAuth(@RequestParam(name="ticket") String ticket);
}
 
 
@RestController
public class UserAuthController {
 
    @Autowired
    UserAuthService userAuthService ;
 
    @GetMapping("/user/auth")
    public Result userAuth(String ticket){
        String rs = userAuthService.userAuth(ticket);
        return Result.ok(rs);
    }
}

当然不管调用第三方或者是Eureka上的api都得在启动类上加上@EnableFeignClients注解
在这里插入图片描述

以上是关于SpringCloud之Feign的主要内容,如果未能解决你的问题,请参考以下文章

Java 微服务之 SpringCloud快速入门day02 Feign

SpringCloud应用之服务调用Feign

springcloud费话之Eureka接口调用(feign)

springcloud费话之断路器(hystrix in feign)

微服务架构SpringCloud之Feign

SpringCloud+Feign环境下文件上传与form-data同时存在的解决办法