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的调度服务与异步服务使用详解

《springboot的调度服务与异步服务使用详解》本文主要介绍了Java的ScheduledExecutorService接口和SpringBoot中如何使用调度线程池,包括核心参数、创建方式、自定... 目录1.调度服务1.1.JDK之ScheduledExecutorService1.2.spring

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

TP-Link PDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务

《TP-LinkPDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务》近期,路由器制造巨头普联(TP-Link)在用户群体中引发了一系列重要变动,上个月,公司发出了一则通知,明确要求所... 路由器厂商普联(TP-Link)上个月发布公告要求所有用户必须完成实名认证后才能继续使用普联提供的 D

微服务架构之使用RabbitMQ进行异步处理方式

《微服务架构之使用RabbitMQ进行异步处理方式》本文介绍了RabbitMQ的基本概念、异步调用处理逻辑、RabbitMQ的基本使用方法以及在SpringBoot项目中使用RabbitMQ解决高并发... 目录一.什么是RabbitMQ?二.异步调用处理逻辑:三.RabbitMQ的基本使用1.安装2.架构

Java中使用Java Mail实现邮件服务功能示例

《Java中使用JavaMail实现邮件服务功能示例》:本文主要介绍Java中使用JavaMail实现邮件服务功能的相关资料,文章还提供了一个发送邮件的示例代码,包括创建参数类、邮件类和执行结... 目录前言一、历史背景二编程、pom依赖三、API说明(一)Session (会话)(二)Message编程客

windos server2022的配置故障转移服务的图文教程

《windosserver2022的配置故障转移服务的图文教程》本文主要介绍了windosserver2022的配置故障转移服务的图文教程,以确保服务和应用程序的连续性和可用性,文中通过图文介绍的非... 目录准备环境:步骤故障转移群集是 Windows Server 2022 中提供的一种功能,用于在多个

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP