前言
不知不觉,“微服务实战系列”
已完成了六篇,每篇都聚焦一个主题,目的是便于各位盆友能够快速、全面地接收和消化。
博主从服务注册到服务监控,从服务路由到服务安全,从身份认证到加密技术均有涉猎。凡此均有关微服务设计和运行的的方方面面,不得不考虑。
行文至此,博主脑门突然闪现出一个灵感:
微服务架构好比一个大型
“部落”
,所谓见“微”
知大,不禁由衷感叹一番。
这里有负责行政的,有负责交通的,有负责开户的,有负责查证的,有负责安检的,有负责监管的,有负责拉闸的,有负责限…的等等。
好了,博主带着大家接着盘点微服务那些事儿
,前序文章已聚齐,欢迎三连,有求必应:
- 微服务实战系列之Sentinel
- 微服务实战系列之Token
- 微服务实战系列之Nacos
- 微服务实战系列之Gateway
- 微服务实战系列之加密RSA
- 微服务实战系列之签名Sign
剧情进入新的境界,今晚我们该聊聊关于Feign
的前世今生了。
Q:什么是Feign
Fegin
是一个通过Java调用HTTP的客户端。其灵感来自于Retrofit、JAXRS-2.0和WebSocket。Feign
的首要目标是降低调用HTTP服务的复杂性,而无需关心是否为RESTful。
官方文档:spring-cloud-feign
官方代码:spring-cloud-openfeign
一句话总结:Feign是一个的客户端,基于此客户端,我们可以调用异构型的http服务,而无需关心服务端是如何实现的
。
这不禁让博主想到了WS,当初WS横空初世的时候,口号无比响亮,效果异常出彩,赢得了世人众多热捧。无论什么人和事,简单又纯粹,自然就可爱。
实践应用
1. Feign客户端
/**
* 用户服务
*/
@FeignClient(contextId = "userService", value ="com-user", fallbackFactory = UserFallbackFactory.class)
public interface ProxyUserService
{
/**
* 通过用户名查询用户信息
*/
@GetMapping("/user/info/{username}")
public T<User> getUser(@PathVariable("username") String username, @RequestHeader("from") String source);
}
2. 服务降级Factory
/**
* 服务降级factory
*/
@Component
public class UserFallbackFactory implements FallbackFactory<UserService>
{
@Override
public UserService create(Throwable throwable)
{
log.error("用户服务调用失败:{}", throwable.getMessage());
return new UserService()
{
@Override
public T<User> getUserInfo(String username, String source)
{
return T.fail(throwable.getMessage());
}
}
}
}
3. 检索服务
通过@FeignClient中的value值,可以检索到相应的微服务com-user
,该名称来自Nacos
服务注册的名称,必须保持一致。
/**
* 用户服务com-user
*/
@RestController
@RequestMapping("/user")
public class UserController
{
@GetMapping("/info/{username}")
public T<User> info(@PathVariable("username") String username)
{
//TODO,此处省略...
}
}
以上为Feign的核心代码,博主大致做了简单的介绍。当然还有其他配置, 比如日志管理、拦截器等,可以参见官方教程查阅。
结语
Feign可以帮助简化 HTTP API 的调用,可以用于服务间调用,顺便也集成了Hystrix。具备可这几个特征,使其在微服务
中,占据一席之地。
至此本篇已完结,又该说再见了,各位盆友有空接着聊~