Files
fizz-gateway-node/docs/guide/plugin/index.html
2020-11-09 11:57:42 +08:00

126 lines
30 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>插件开发 | Fizz Gateway</title>
<meta name="generator" content="VuePress 1.5.2">
<meta name="description" content="">
<link rel="preload" href="/assets/css/0.styles.34d67128.css" as="style"><link rel="preload" href="/assets/js/app.86b5ae26.js" as="script"><link rel="preload" href="/assets/js/2.5b001851.js" as="script"><link rel="preload" href="/assets/js/29.60b7285b.js" as="script"><link rel="prefetch" href="/assets/js/10.b57afcaa.js"><link rel="prefetch" href="/assets/js/11.21242c7f.js"><link rel="prefetch" href="/assets/js/12.61089982.js"><link rel="prefetch" href="/assets/js/13.fdb2bea3.js"><link rel="prefetch" href="/assets/js/14.62d9a88b.js"><link rel="prefetch" href="/assets/js/15.0358b10e.js"><link rel="prefetch" href="/assets/js/16.43a475d2.js"><link rel="prefetch" href="/assets/js/17.32fa8ea0.js"><link rel="prefetch" href="/assets/js/18.603a235b.js"><link rel="prefetch" href="/assets/js/19.5c4af839.js"><link rel="prefetch" href="/assets/js/20.1bf2bcbb.js"><link rel="prefetch" href="/assets/js/21.dca6f5c4.js"><link rel="prefetch" href="/assets/js/22.db62cc12.js"><link rel="prefetch" href="/assets/js/23.5b796ecf.js"><link rel="prefetch" href="/assets/js/24.72fe0b8b.js"><link rel="prefetch" href="/assets/js/25.bbf8bff1.js"><link rel="prefetch" href="/assets/js/26.70321f43.js"><link rel="prefetch" href="/assets/js/27.505a813e.js"><link rel="prefetch" href="/assets/js/28.cdddd7aa.js"><link rel="prefetch" href="/assets/js/3.a51774e3.js"><link rel="prefetch" href="/assets/js/30.0222f21c.js"><link rel="prefetch" href="/assets/js/4.7d5f245c.js"><link rel="prefetch" href="/assets/js/5.a59b20e1.js"><link rel="prefetch" href="/assets/js/6.e883523c.js"><link rel="prefetch" href="/assets/js/7.00dd2642.js"><link rel="prefetch" href="/assets/js/8.645ad4e8.js"><link rel="prefetch" href="/assets/js/9.9eb9244c.js">
<link rel="stylesheet" href="/assets/css/0.styles.34d67128.css">
</head>
<body>
<div id="app" data-server-rendered="true"><div class="theme-container"><header class="navbar"><div class="sidebar-button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512" class="icon"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"></path></svg></div> <a href="/" class="home-link router-link-active"><!----> <span class="site-name">Fizz Gateway</span></a> <div class="links"><div class="search-box"><input aria-label="Search" autocomplete="off" spellcheck="false" value=""> <!----></div> <nav class="nav-links can-hide"><div class="nav-item"><a href="/" class="nav-link">
首页
</a></div><div class="nav-item"><a href="/guide/intro/" class="nav-link">
使用文档
</a></div> <a href="https://github.com/wehotel/fizz-gateway-community" target="_blank" rel="noopener noreferrer" class="repo-link">
查看源码
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></nav></div></header> <div class="sidebar-mask"></div> <aside class="sidebar"><nav class="nav-links"><div class="nav-item"><a href="/" class="nav-link">
首页
</a></div><div class="nav-item"><a href="/guide/intro/" class="nav-link">
使用文档
</a></div> <a href="https://github.com/wehotel/fizz-gateway-community" target="_blank" rel="noopener noreferrer" class="repo-link">
查看源码
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></nav> <ul class="sidebar-links"><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>Fizz简介</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/guide/intro/" class="sidebar-link">什么是Fizz网关</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/guide/intro/#什么是fizz网关" class="sidebar-link">什么是Fizz网关</a></li><li class="sidebar-sub-header"><a href="/guide/intro/#fizz的设计" class="sidebar-link">Fizz的设计</a></li><li class="sidebar-sub-header"><a href="/guide/intro/#产品特性" class="sidebar-link">产品特性</a></li></ul></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>安装部署</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/guide/installation/" class="sidebar-link">安装</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/guide/installation/#安装依赖" class="sidebar-link">安装依赖</a></li><li class="sidebar-sub-header"><a href="/guide/installation/#安装fizz" class="sidebar-link">安装Fizz</a></li></ul></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>路由转发</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/guide/proxy/" class="sidebar-link">路由转发</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/guide/proxy/#路由转发介绍" class="sidebar-link">路由转发介绍</a></li><li class="sidebar-sub-header"><a href="/guide/proxy/#接入路由转发" class="sidebar-link">接入路由转发</a></li></ul></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>服务编排</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/guide/aggregate/" class="sidebar-link">服务编排介绍</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/guide/aggregate/#什么是服务编排" class="sidebar-link">什么是服务编排</a></li><li class="sidebar-sub-header"><a href="/guide/aggregate/#举例说明" class="sidebar-link">举例说明</a></li><li class="sidebar-sub-header"><a href="/guide/aggregate/#服务编排架构" class="sidebar-link">服务编排架构</a></li><li class="sidebar-sub-header"><a href="/guide/aggregate/#适用场景" class="sidebar-link">适用场景</a></li></ul></li><li><a href="/guide/aggregate/overview.html" class="sidebar-link">步骤总览</a></li><li><a href="/guide/aggregate/configuration.html" class="sidebar-link">服务编排配置</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/guide/aggregate/configuration.html#创建服务" class="sidebar-link">创建服务</a></li><li class="sidebar-sub-header"><a href="/guide/aggregate/configuration.html#创建聚合接口" class="sidebar-link">创建聚合接口</a></li><li class="sidebar-sub-header"><a href="/guide/aggregate/configuration.html#配置输入" class="sidebar-link">配置输入</a></li><li class="sidebar-sub-header"><a href="/guide/aggregate/configuration.html#配置校验结果" class="sidebar-link">配置校验结果</a></li><li class="sidebar-sub-header"><a href="/guide/aggregate/configuration.html#配置步骤" class="sidebar-link">配置步骤</a></li><li class="sidebar-sub-header"><a href="/guide/aggregate/configuration.html#配置输出" class="sidebar-link">配置输出</a></li><li class="sidebar-sub-header"><a href="/guide/aggregate/configuration.html#脚本-2" class="sidebar-link">脚本</a></li><li class="sidebar-sub-header"><a href="/guide/aggregate/configuration.html#异常处理" class="sidebar-link">异常处理</a></li><li class="sidebar-sub-header"><a href="/guide/aggregate/configuration.html#配置路由" class="sidebar-link">配置路由</a></li><li class="sidebar-sub-header"><a href="/guide/aggregate/configuration.html#在线测试" class="sidebar-link">在线测试</a></li><li class="sidebar-sub-header"><a href="/guide/aggregate/configuration.html#导入导出" class="sidebar-link">导入导出</a></li><li class="sidebar-sub-header"><a href="/guide/aggregate/configuration.html#发布-下线和审核" class="sidebar-link">发布|下线和审核</a></li></ul></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading open"><span>插件机制</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/guide/plugin/" aria-current="page" class="active sidebar-link">插件开发</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/guide/plugin/#概述" class="sidebar-link">概述</a></li><li class="sidebar-sub-header"><a href="/guide/plugin/#gateway开发" class="sidebar-link">gateway开发</a></li><li class="sidebar-sub-header"><a href="/guide/plugin/#manager配置" class="sidebar-link">manager配置</a></li></ul></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>基准测试</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/guide/benchmark/" class="sidebar-link">benchmark</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/guide/benchmark/#基准测试结果" class="sidebar-link">基准测试结果</a></li><li class="sidebar-sub-header"><a href="/guide/benchmark/#基准测试详情" class="sidebar-link">基准测试详情</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/guide/benchmark/#硬件环境" class="sidebar-link">硬件环境</a></li><li class="sidebar-sub-header"><a href="/guide/benchmark/#压测工具" class="sidebar-link">压测工具</a></li><li class="sidebar-sub-header"><a href="/guide/benchmark/#压测结果截图" class="sidebar-link">压测结果截图</a></li></ul></li></ul></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>管理后台</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/guide/manager/manager_overview.html" class="sidebar-link">管理后台简介</a></li><li><a href="/guide/manager/manager_gateway_group.html" class="sidebar-link">网关分组</a></li><li><a href="/guide/manager/manager_plugin.html" class="sidebar-link">插件管理</a></li><li><a href="/guide/manager/manager_app_id.html" class="sidebar-link">appID管理</a></li><li><a href="/guide/manager/manager_api_auth.html" class="sidebar-link">路由管理</a></li><li><a href="/guide/manager/manager_service.html" class="sidebar-link">服务管理</a></li><li><a href="/guide/manager/manager_aggregate.html" class="sidebar-link">接口列表</a></li><li><a href="/guide/manager/manager_aggregate_op_log.html" class="sidebar-link">操作日志</a></li><li><a href="/guide/manager/manager_gateway_aggregate_cache.html" class="sidebar-link">网关缓存</a></li><li><a href="/guide/manager/manager_aggregate_my_apply.html" class="sidebar-link">我的申请</a></li><li><a href="/guide/manager/manager_aggregate_approve.html" class="sidebar-link">待审核</a></li><li><a href="/guide/manager/manager_aggregate_approve_op_log.html" class="sidebar-link">审核日志</a></li><li><a href="/guide/manager/manager_role.html" class="sidebar-link">角色管理</a></li><li><a href="/guide/manager/manager_user.html" class="sidebar-link">用户管理</a></li></ul></section></li></ul> </aside> <main class="page"> <div class="theme-default-content content__default"><h2 id="概述"><a href="#概述" class="header-anchor">#</a> 概述</h2> <p>当需要在gateway中加入自定义的逻辑时可通过fizz的插件机制实现插件<br>
1、类似spring的WebFilter是fizz内部的WebFilter由fizz调度<br>
2、对不同的请求可配置不同的上下文参数可通过manager完成配置<br>
3、若有多个插件当前插件可获取前面插件的执行结果。</p> <p>插件的开发和应用分gateway开发、manager配置两部分下面以一个例子依次介绍。</p> <h2 id="gateway开发"><a href="#gateway开发" class="header-anchor">#</a> gateway开发</h2> <div class="language-java extra-class"><pre class="language-java"><code> 实现
<span class="token keyword">public</span> <span class="token keyword">abstract</span> <span class="token keyword">class</span> <span class="token class-name">PluginFilter</span> <span class="token punctuation">{</span>
<span class="token keyword">public</span> <span class="token keyword">abstract</span> <span class="token class-name">Mono</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">Void</span><span class="token punctuation">&gt;</span></span> <span class="token function">doFilter</span><span class="token punctuation">(</span><span class="token class-name">ServerWebExchange</span> exchange<span class="token punctuation">,</span> <span class="token class-name">Map</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">String</span><span class="token punctuation">,</span> <span class="token class-name">Object</span><span class="token punctuation">&gt;</span></span> config<span class="token punctuation">,</span> <span class="token class-name">String</span> fixedConfig<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
即定义了一个插件。
比如
<span class="token annotation punctuation">@Component</span><span class="token punctuation">(</span><span class="token class-name">TestPluginFilter</span><span class="token punctuation">.</span>TEST_PLUGIN_FILTER<span class="token punctuation">)</span>
<span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">TestPluginFilter</span> <span class="token keyword">extends</span> <span class="token class-name">PluginFilter</span> <span class="token punctuation">{</span>
<span class="token keyword">private</span> <span class="token keyword">static</span> <span class="token keyword">final</span> <span class="token class-name">Logger</span> log <span class="token operator">=</span> <span class="token class-name">LoggerFactory</span><span class="token punctuation">.</span><span class="token function">getLogger</span><span class="token punctuation">(</span><span class="token class-name">TestPluginFilter</span><span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">final</span> <span class="token class-name">String</span> TEST_PLUGIN_FILTER <span class="token operator">=</span> <span class="token string">&quot;testPlugin&quot;</span><span class="token punctuation">;</span>
<span class="token annotation punctuation">@Override</span>
<span class="token keyword">public</span> <span class="token class-name">Mono</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">Void</span><span class="token punctuation">&gt;</span></span> <span class="token function">doFilter</span><span class="token punctuation">(</span><span class="token class-name">ServerWebExchange</span> exchange<span class="token punctuation">,</span> <span class="token class-name">Map</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">String</span><span class="token punctuation">,</span> <span class="token class-name">Object</span><span class="token punctuation">&gt;</span></span> config<span class="token punctuation">,</span> <span class="token class-name">String</span> fixedConfig<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">String</span> rid <span class="token operator">=</span> exchange<span class="token punctuation">.</span><span class="token function">getRequest</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getId</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token class-name">Boolean</span> logReqId <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token class-name">Boolean</span><span class="token punctuation">)</span> config<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token string">&quot;logReqId&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 是否记录请求id日志可通过manager配置</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>logReqId <span class="token operator">==</span> <span class="token keyword">null</span> <span class="token operator">||</span> logReqId<span class="token punctuation">)</span> <span class="token punctuation">{</span>
log<span class="token punctuation">.</span><span class="token function">info</span><span class="token punctuation">(</span>exchange<span class="token punctuation">.</span><span class="token function">getRequest</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getURI</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token string">&quot; 的请求id: &quot;</span> <span class="token operator">+</span> rid<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token class-name">Boolean</span> appendFizzRsv <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token class-name">Boolean</span><span class="token punctuation">)</span> config<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token string">&quot;appendFizzRsv&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>appendFizzRsv <span class="token operator">==</span> <span class="token keyword">null</span> <span class="token operator">||</span> appendFizzRsv<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">WebUtils</span><span class="token punctuation">.</span><span class="token function">appendHeader</span><span class="token punctuation">(</span>exchange<span class="token punctuation">,</span> <span class="token string">&quot;FIZZ-RSV&quot;</span><span class="token punctuation">,</span> rid<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">return</span> <span class="token class-name">WebUtils</span><span class="token punctuation">.</span><span class="token function">transmitSuccessFilterResultAndEmptyMono</span><span class="token punctuation">(</span>exchange<span class="token punctuation">,</span> TEST_PLUGIN_FILTER<span class="token punctuation">,</span> <span class="token keyword">null</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 保存插件执行结果,并返回</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
这个插件插件必须是一个spring的<span class="token class-name">Component</span>或子注解且要有id这个插件的id是testPlugin它实现了两个功能记录请求id日志转发请求时添加FIZZ<span class="token operator">-</span>RSV请求头并且功能是可打开或关闭的。
另外可通过:
<span class="token class-name">WebUtils</span><span class="token punctuation">.</span><span class="token function">getPrevFilterResult</span><span class="token punctuation">(</span>exchange<span class="token punctuation">)</span><span class="token punctuation">;</span> 获取上一个插件的执行结果,
<span class="token class-name">WebUtils</span><span class="token punctuation">.</span><span class="token function">getFilterResult</span><span class="token punctuation">(</span>exchange<span class="token punctuation">,</span> <span class="token string">&quot;plugin.id&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 获取已执行的任意一个插件的执行结果。
</code></pre></div><h2 id="manager配置"><a href="#manager配置" class="header-anchor">#</a> manager配置</h2> <p>1、定义插件</p> <div class="language-sql extra-class"><pre class="language-sql"><code> 在插件表中,定义上面的插件:
<span class="token keyword">INSERT</span> <span class="token keyword">INTO</span> <span class="token punctuation">`</span>tb_plugin<span class="token punctuation">`</span> <span class="token punctuation">(</span><span class="token punctuation">`</span>eng_name<span class="token punctuation">`</span><span class="token punctuation">,</span> <span class="token punctuation">`</span>chn_name<span class="token punctuation">`</span><span class="token punctuation">,</span> <span class="token punctuation">`</span>config<span class="token punctuation">`</span><span class="token punctuation">,</span> <span class="token punctuation">`</span><span class="token keyword">order</span><span class="token punctuation">`</span><span class="token punctuation">)</span>
<span class="token keyword">VALUES</span>
<span class="token punctuation">(</span>
<span class="token string">'testPlugin'</span><span class="token punctuation">,</span>
<span class="token string">'测试插件'</span><span class="token punctuation">,</span>
<span class="token string">'[{\&quot;field\&quot;:\&quot;logReqId\&quot;,\&quot;label\&quot;:\&quot;打印请求id日志\&quot;,\&quot;component\&quot;:\&quot;radio\&quot;,\&quot;dataType\&quot;:\&quot;boolean\&quot;,\&quot;default\&quot;:false,\&quot;options\&quot;:[{\&quot;label\&quot;:\&quot;是\&quot;,\&quot;value\&quot;:true},{\&quot;label\&quot;:\&quot;否\&quot;,\&quot;value\&quot;:false}]},{\&quot;field\&quot;:\&quot;appendFizzRsv\&quot;,\&quot;label\&quot;:\&quot;添加fizzRsv请求头\&quot;,\&quot;component\&quot;:\&quot;radio\&quot;,\&quot;dataType\&quot;:\&quot;boolean\&quot;,\&quot;default\&quot;:false,\&quot;options\&quot;:[{\&quot;label\&quot;:\&quot;是\&quot;,\&quot;value\&quot;:true},{\&quot;label\&quot;:\&quot;否\&quot;,\&quot;value\&quot;:false}]}]'</span><span class="token punctuation">,</span>
<span class="token number">250</span>
<span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre></div><div class="language-json extra-class"><pre class="language-json"><code> eng_name为插件的idchn_name为插件中文名order为插件的执行顺序也是插件在界面上的显示顺序。
config
<span class="token punctuation">[</span>
<span class="token punctuation">{</span>
<span class="token property">&quot;field&quot;</span><span class="token operator">:</span><span class="token string">&quot;logReqId&quot;</span><span class="token punctuation">,</span>
<span class="token property">&quot;label&quot;</span><span class="token operator">:</span><span class="token string">&quot;打印请求id日志&quot;</span><span class="token punctuation">,</span>
<span class="token property">&quot;component&quot;</span><span class="token operator">:</span><span class="token string">&quot;radio&quot;</span><span class="token punctuation">,</span>
<span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span><span class="token string">&quot;boolean&quot;</span><span class="token punctuation">,</span>
<span class="token property">&quot;default&quot;</span><span class="token operator">:</span><span class="token boolean">false</span><span class="token punctuation">,</span>
<span class="token property">&quot;options&quot;</span><span class="token operator">:</span><span class="token punctuation">[</span>
<span class="token punctuation">{</span>
<span class="token property">&quot;label&quot;</span><span class="token operator">:</span><span class="token string">&quot;&quot;</span><span class="token punctuation">,</span>
<span class="token property">&quot;value&quot;</span><span class="token operator">:</span><span class="token boolean">true</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">{</span>
<span class="token property">&quot;label&quot;</span><span class="token operator">:</span><span class="token string">&quot;&quot;</span><span class="token punctuation">,</span>
<span class="token property">&quot;value&quot;</span><span class="token operator">:</span><span class="token boolean">false</span>
<span class="token punctuation">}</span>
<span class="token punctuation">]</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">{</span>
<span class="token property">&quot;field&quot;</span><span class="token operator">:</span><span class="token string">&quot;appendFizzRsv&quot;</span><span class="token punctuation">,</span>
<span class="token property">&quot;label&quot;</span><span class="token operator">:</span><span class="token string">&quot;添加fizzRsv请求头&quot;</span><span class="token punctuation">,</span>
<span class="token property">&quot;component&quot;</span><span class="token operator">:</span><span class="token string">&quot;radio&quot;</span><span class="token punctuation">,</span>
<span class="token property">&quot;dataType&quot;</span><span class="token operator">:</span><span class="token string">&quot;boolean&quot;</span><span class="token punctuation">,</span>
<span class="token property">&quot;default&quot;</span><span class="token operator">:</span><span class="token boolean">false</span><span class="token punctuation">,</span>
<span class="token property">&quot;options&quot;</span><span class="token operator">:</span><span class="token punctuation">[</span>
<span class="token punctuation">{</span>
<span class="token property">&quot;label&quot;</span><span class="token operator">:</span><span class="token string">&quot;&quot;</span><span class="token punctuation">,</span>
<span class="token property">&quot;value&quot;</span><span class="token operator">:</span><span class="token boolean">true</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">{</span>
<span class="token property">&quot;label&quot;</span><span class="token operator">:</span><span class="token string">&quot;&quot;</span><span class="token punctuation">,</span>
<span class="token property">&quot;value&quot;</span><span class="token operator">:</span><span class="token boolean">false</span>
<span class="token punctuation">}</span>
<span class="token punctuation">]</span>
<span class="token punctuation">}</span>
<span class="token punctuation">]</span>
前端据此生成插件的配置表单,具体参前端说明。
</code></pre></div><p>2、应用插件</p> <p>如对
<img src="/xapi.png" alt=""></p> <p>接口应用插件:
<img src="/test-plugin.png" alt=""></p> <p>上面配置的&quot;打印请求id日志&quot;&quot;添加fizzRsv请求头&quot;,对应</p> <div class="language-java extra-class"><pre class="language-java"><code><span class="token keyword">public</span> <span class="token class-name">Mono</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">Void</span><span class="token punctuation">&gt;</span></span> <span class="token function">doFilter</span><span class="token punctuation">(</span><span class="token class-name">ServerWebExchange</span> exchange<span class="token punctuation">,</span> <span class="token class-name">Map</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">String</span><span class="token punctuation">,</span> <span class="token class-name">Object</span><span class="token punctuation">&gt;</span></span> config<span class="token punctuation">,</span> <span class="token class-name">String</span> fixedConfig<span class="token punctuation">)</span>
</code></pre></div><p>中config的logReqId和appendFizzRsv key。</p></div> <footer class="page-edit"><!----> <div class="last-updated"><span class="prefix">上次更新:</span> <span class="time">2020-11-9 11:50</span></div></footer> <div class="page-nav"><p class="inner"><span class="prev">
<a href="/guide/aggregate/configuration.html" class="prev">
服务编排配置
</a></span> <span class="next"><a href="/guide/benchmark/">
benchmark
</a>
</span></p></div> </main></div><div class="global-ui"></div></div>
<script src="/assets/js/app.86b5ae26.js" defer></script><script src="/assets/js/2.5b001851.js" defer></script><script src="/assets/js/29.60b7285b.js" defer></script>
</body>
</html>