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费话之Eureka接口调用(feign)