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

相关文章

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

容器编排平台Kubernetes简介

目录 什么是K8s 为什么需要K8s 什么是容器(Contianer) K8s能做什么? K8s的架构原理  控制平面(Control plane)         kube-apiserver         etcd         kube-scheduler         kube-controller-manager         cloud-controlle

基于SpringBoot的宠物服务系统+uniapp小程序+LW参考示例

系列文章目录 1.基于SSM的洗衣房管理系统+原生微信小程序+LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统+LW参考示例 3.基于SpringBoot+Vue的企业人事管理系统+LW参考示例 4.基于SSM的高校实验室管理系统+LW参考示例 5.基于SpringBoot的二手数码回收系统+原生微信小程序+LW参考示例 6.基于SSM的民宿预订管理系统+LW参考示例 7.基于

计算机网络基础概念 交换机、路由器、网关、TBOX

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、VLAN是什么?二 、交换机三、路由器四、网关五、TBOXTelematics BOX,简称车载T-BOX,车联网系统包含四部分,主机、车载T-BOX、手机APP及后台系统。主机主要用于车内的影音娱乐,以及车辆信息显示;车载T-BOX主要用于和后台系统/手机APP通信,实现手机APP的车辆信息显示与控

Golang支持平滑升级的HTTP服务

前段时间用Golang在做一个HTTP的接口,因编译型语言的特性,修改了代码需要重新编译可执行文件,关闭正在运行的老程序,并启动新程序。对于访问量较大的面向用户的产品,关闭、重启的过程中势必会出现无法访问的情况,从而影响用户体验。 使用Golang的系统包开发HTTP服务,是无法支持平滑升级(优雅重启)的,本文将探讨如何解决该问题。 一、平滑升级(优雅重启)的一般思路 一般情况下,要实现平滑

Golang服务平滑重启

与重载配置相同的是我们也需要通过信号来通知server重启,但关键在于平滑重启,如果只是简单的重启,只需要kill掉,然后再拉起即可。平滑重启意味着server升级的时候可以不用停止业务。 我们先来看下Github上有没有相应的库解决这个问题,然后找到了如下三个库: facebookgo/grace - Graceful restart & zero downtime deploy for G