Fizz企业级微服务网关-服务编排,祭出终结BFF层的大杀器

2023-11-07 11:30

本文主要是介绍Fizz企业级微服务网关-服务编排,祭出终结BFF层的大杀器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

概述

服务编排是Fizz网关提供的一个强大的功能,能够基于现有的业务微服务通过在线配置的方式快速的生成一个聚合接口,减少中间层胶水代码以及降低编码投入。本文介绍服务编排三个常见场景的使用:单API结果裁剪、多API数据聚合、多API之间传递依赖。

#服务编排架构

#适用场景

#前端

1、一个页面调用多个接口时,可以编排好返回聚合结果,提高页面数据的加载速度

2、移动设备计算能力有限,可以把数据计算或业务处理逻辑放到服务端完成,加快页面响应

#后端

1、替换应用层的聚合接口,减少应用层的胶水代码

2、快速生成透传数据类型的接口

3、数据转换和映射

#资料准备

#Fizz网关安装

可参考: 安装 | Fizz Gateway

#底层服务接口

本文服务编排调用的底层服务接口源码可从github(https://github.com/fizzgate/fizz-examples)获取。从github克隆最新的fizz-examples源码,并启动fizz-examples-rest-api服务。

管理后台(菜单位置:RPC管理->服务声明)配置服务声明,如图所示。

#新增编排接口

管理后台,菜单位置:服务编辑->接口列表,点击新增。

#例子1:单API结果裁剪

本例子在编排接口中调用底层fizz-examples-rest-api服务的/user/detail接口(接口源码:UserController)来获取用户详情信息,并对该接口的响应进行裁剪以满足我们想要的数据格式。

#基础信息

#配置输入

在配置输入tab可以定义接口的入参和请求头等信息,如果不配置入参或请求头,网关会原样接收调用方传过来的所有入参或请求头,但不会对接收到的参数做任何校验。在本例子中查询用户详情必须传userId,配置如下图所示。

#配置步骤

新增1个步骤step1,然后在步骤step1里新增1个请求request1,服务选择我们预先准备好的fizz-examples-rest-api服务,请求/user/detail接口。入参我们使用input.request.params.userId来引用前端传过来的userId参数,在这里使用了引用值的方式来引用入参,相关引用值的使用方式可参考文档:数据转换使用文档 。配置响应部分留空,网关会原样接收接口的返回结果。

#配置输出

配置要返回给前端的响应报文,这里配置了响应体有以下字段:

msgCode:固定值字符串类型,值为"100";

msg:引用类型,值为步骤step1中请求request1的响应的message字段;

user.info.age:引用类型,值为步骤step1中请求request1的响应的data.age字段。

#测试

直接调用/user/detail接口得到的响应如图所示。

测试接口得到响应如图所示。

从测试接口的响应可以看出服务编排接口已完成了对/user/detail接口的请求并正确输出了配置的结果,完成了对API结果的裁剪。

#例子2:多API数据聚合

本例子在编排接口中并发调用底层fizz-examples-rest-api服务的/user/detail接口(接口源码:UserController)和/order/detail接口(接口源码:OrderController)来获取用户详情信息和订单详情信息,并在订单详情信息中加入我们想要的用户名和手机号码,将聚合后的订单详情信息响应给客户端。

#基础信息

#配置输入

在本例子中查询用户订单详情必须传userId和orderNo,配置如下图所示。

#配置步骤

新增1个步骤step1,然后在步骤step1里新增1个请求request1,服务选择fizz-examples-rest-api服务,请求/user/detail接口。入参我们使用input.request.params.userId来引用前端传过来的userId参数。

在步骤step1里新增1个请求request2,服务选择fizz-examples-rest-api服务,请求/order/detail接口。入参我们使用input.request.params.userId来引用前端传过来的userId参数,使用input.request.params.orderNo来引用前端传过来的orderNo参数。

#配置输出

配置要返回给前端的响应报文,这里配置了响应体有以下字段:

msg:引用类型,值为步骤step1中请求request2的响应的message字段;

code:引用类型,值为步骤step1中请求request2的响应的code字段;

order:引用类型,值为步骤step1中请求request2的响应的data字段;

order.userName:引用类型,值为步骤step1中请求request1的响应的data.userName字段;该配置在order字段中加入了从request1中获取到的userName值;

order.mobile:引用类型,值为步骤step1中请求request1的响应的data.phone字段;该配置在order字段中加入了从request1中获取到的phone值。

#测试

直接调用/user/detail接口得到的响应如图所示。

直接调用/order/detail接口得到的响应如图所示。

测试接口得到响应如图所示。

从测试接口的响应可以看出服务编排接口已完成了对/user/detail接口和/order/detail接口响应的聚合并正确输出了配置的结果。

#例子3:多API之间传递依赖

本例子在编排接口中串行调用底层fizz-examples-rest-api服务的/weather/getMobileCodeInfo接口和/weather/getWeatherbyCityName接口(接口源码:WeatherController),/weather/getWeatherbyCityName接口的调用依赖于/weather/getMobileCodeInfo接口的响应,通过调用/weather/getMobileCodeInfo接口获取查询手机所在的城市后调用/weather/getWeatherbyCityName接口获取该城市的天气。

#基础信息

#配置输入

在本例子中查询手机所在地天气信息必须传mobile,配置如下图所示。

#配置步骤

新增1个步骤step1,然后在步骤step1里新增1个请求request1,服务选择fizz-examples-rest-api服务,请求/weather/getMobileCodeInfo接口。入参我们使用input.request.params.mobile来引用前端传过来的mobile参数。

新增1个步骤step2,然后在步骤step2里新增1个请求request1,服务选择fizz-examples-rest-api服务,请求/weather/getWeatherbyCityName接口。入参我们使用step1.request1.response.body.city来引用步骤step1的请求request1的响应city字段。

#配置输出

配置要返回给前端的响应报文,这里直接引用步骤step2里的请求request1的响应结果。

#测试

直接调用/weather/getMobileCodeInfo接口得到的响应如图所示。

直接调用/weather/getWeatherbyCityName接口得到的响应如图所示。

测试接口得到响应如图所示。

从测试接口的响应可以看出服务编排接口已完成了对/weather/getMobileCodeInfo接口和/weather/getWeatherbyCityName接口的串行调用并正确输出了配置的结果。

#结束语

本文通过三个例子介绍了服务编排三个常见场景的使用:单API结果裁剪、多API数据聚合、多API之间传递依赖。使用服务编排能够通过在线配置的方式快速的生成一个聚合接口,减少中间层胶水代码以及降低编码投入,提高我们的生产效率。

#Fizz网关介绍

Fizz Gateway 是一个基于 Java开发的微服务聚合网关,能够实现热服务编排聚合、自动授权选择、线上服务脚本编码、在线测试、高性能路由、API审核管理、回调管理等目的,拥有强大的自定义插件系统可以自行扩展,并且提供友好的图形化配置界面,能够快速帮助企业进行API服务治理、减少中间层胶水代码以及降低编码投入、提高 API 服务的稳定性和安全性。

官网:https://www.fizzgate.com

GitHub: GitHub - fizzgate/fizz-gateway-community: 微服务API聚合网关 An Aggregation API Gateway

码云:fizz-gateway: 微服务API聚合网关 An Aggregation API Gateway

入门教程:入门系统教程 | Fizz Gateway


作者:ZHONG.J

这篇关于Fizz企业级微服务网关-服务编排,祭出终结BFF层的大杀器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/363309

相关文章

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

SpringCloud整合MQ实现消息总线服务方式

《SpringCloud整合MQ实现消息总线服务方式》:本文主要介绍SpringCloud整合MQ实现消息总线服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、背景介绍二、方案实践三、升级版总结一、背景介绍每当修改配置文件内容,如果需要客户端也同步更新,

linux服务之NIS账户管理服务方式

《linux服务之NIS账户管理服务方式》:本文主要介绍linux服务之NIS账户管理服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、所需要的软件二、服务器配置1、安装 NIS 服务2、设定 NIS 的域名 (NIS domain name)3、修改主

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾

springboot项目如何开启https服务

《springboot项目如何开启https服务》:本文主要介绍springboot项目如何开启https服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录springboot项目开启https服务1. 生成SSL证书密钥库使用keytool生成自签名证书将

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

Spring LDAP目录服务的使用示例

《SpringLDAP目录服务的使用示例》本文主要介绍了SpringLDAP目录服务的使用示例... 目录引言一、Spring LDAP基础二、LdapTemplate详解三、LDAP对象映射四、基本LDAP操作4.1 查询操作4.2 添加操作4.3 修改操作4.4 删除操作五、认证与授权六、高级特性与最佳

Linux上设置Ollama服务配置(常用环境变量)

《Linux上设置Ollama服务配置(常用环境变量)》本文主要介绍了Linux上设置Ollama服务配置(常用环境变量),Ollama提供了多种环境变量供配置,如调试模式、模型目录等,下面就来介绍一... 目录在 linux 上设置环境变量配置 OllamPOgxSRJfa手动安装安装特定版本查看日志在

SpringCloud之LoadBalancer负载均衡服务调用过程

《SpringCloud之LoadBalancer负载均衡服务调用过程》:本文主要介绍SpringCloud之LoadBalancer负载均衡服务调用过程,具有很好的参考价值,希望对大家有所帮助,... 目录前言一、LoadBalancer是什么?二、使用步骤1、启动consul2、客户端加入依赖3、以服务