微服务实战系列之Feign

前言

不知不觉,"微服务实战系列"已完成了六篇,每篇都聚焦一个主题,目的是便于各位盆友能够快速、全面地接收和消化。

博主从服务注册到服务监控,从服务路由到服务安全,从身份认证到加密技术均有涉猎。凡此均有关微服务设计和运行的的方方面面,不得不考虑。

行文至此,博主脑门突然闪现出一个灵感:

微服务架构好比一个大型"部落",所谓见"微"知大,不禁由衷感叹一番。

这里有负责行政的,有负责交通的,有负责开户的,有负责查证的,有负责安检的,有负责监管的,有负责拉闸的,有负责限...的等等。

好了,博主带着大家接着盘点微服务那些事儿,前序文章已聚齐,欢迎三连,有求必应:

剧情进入新的境界,今晚我们该聊聊关于Feign的前世今生了。


Q:什么是Feign

Fegin是一个通过Java调用HTTP的客户端。其灵感来自于Retrofit、JAXRS-2.0和WebSocket。Feign的首要目标是降低调用HTTP服务的复杂性,而无需关心是否为RESTful。

官方文档:spring-cloud-feign

官方代码:spring-cloud-openfeign

一句话总结:Feign是一个http客户端,基于此客户端,我们可以调用异构型的http服务,而无需关心服务端是如何实现的

这不禁让博主想到了WS,当初WS横空出世的时候,口号无比响亮,效果异常出彩,赢得了世人众多热捧。无论什么人和事,简单又纯粹,自然就可爱。

实践应用

1. Feign客户端
java 复制代码
/**
 * 用户服务
 */
@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
java 复制代码
/**
 * 服务降级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服务注册的名称,必须保持一致。

java 复制代码
/**
 * 用户服务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。具备这几个特征,使其在微服务中,占据一席之地。

至此本篇已完结,又该说再见了,各位盆友有空接着聊~

相关推荐
有一个好名字34 分钟前
zookeeper分布式锁模拟12306买票
分布式·zookeeper·云原生
9527华安2 小时前
FPGA多路MIPI转FPD-Link视频缩放拼接显示,基于IMX327+FPD953架构,提供2套工程源码和技术支持
fpga开发·架构·音视频
Anna_Tong3 小时前
云原生大数据计算服务 MaxCompute 是什么?
大数据·阿里云·云原生·maxcompute·odps
运维&陈同学4 小时前
【模块一】kubernetes容器编排进阶实战之基于velero及minio实现etcd数据备份与恢复
数据库·后端·云原生·容器·kubernetes·etcd·minio·velero
qq_171538856 小时前
利用Spring Cloud Gateway Predicate优化微服务路由策略
android·javascript·微服务
liuxuzxx6 小时前
Istio-2:流量治理之简单负载均衡
云原生·kubernetes·istio
三桥彭于晏8 小时前
B/S 跟C/S架构的区别
架构
科技互联人生11 小时前
微服务常用的中间件及其用途
微服务·中间件·系统架构
小蜗牛慢慢爬行13 小时前
如何在 Spring Boot 微服务中设置和管理多个数据库
java·数据库·spring boot·后端·微服务·架构·hibernate
小扳15 小时前
微服务篇-深入了解 MinIO 文件服务器(你还在使用阿里云 0SS 对象存储图片服务?教你使用 MinIO 文件服务器:实现从部署到具体使用)
java·服务器·分布式·微服务·云原生·架构