mirror of
https://gitee.com/durcframework/SOP.git
synced 2025-08-11 21:57:56 +08:00
2.0
This commit is contained in:
@@ -9,7 +9,7 @@ import com.gitee.fastmybatis.core.query.Query;
|
|||||||
import com.gitee.sop.adminserver.api.service.param.LimitParam;
|
import com.gitee.sop.adminserver.api.service.param.LimitParam;
|
||||||
import com.gitee.sop.adminserver.api.service.param.RouteSearchParam;
|
import com.gitee.sop.adminserver.api.service.param.RouteSearchParam;
|
||||||
import com.gitee.sop.adminserver.api.service.result.LimitVO;
|
import com.gitee.sop.adminserver.api.service.result.LimitVO;
|
||||||
import com.gitee.sop.adminserver.bean.GatewayRouteDefinition;
|
import com.gitee.sop.adminserver.bean.RouteDefinition;
|
||||||
import com.gitee.sop.adminserver.bean.RouteConfigDto;
|
import com.gitee.sop.adminserver.bean.RouteConfigDto;
|
||||||
import com.gitee.sop.adminserver.common.BizException;
|
import com.gitee.sop.adminserver.common.BizException;
|
||||||
import com.gitee.sop.adminserver.common.LimitEnum;
|
import com.gitee.sop.adminserver.common.LimitEnum;
|
||||||
@@ -51,7 +51,7 @@ public class LimitApi {
|
|||||||
@Api(name = "route.limit.list")
|
@Api(name = "route.limit.list")
|
||||||
@ApiDocMethod(description = "限流列表", elementClass = LimitVO.class)
|
@ApiDocMethod(description = "限流列表", elementClass = LimitVO.class)
|
||||||
List<LimitVO> listLimit(RouteSearchParam param) throws Exception {
|
List<LimitVO> listLimit(RouteSearchParam param) throws Exception {
|
||||||
List<GatewayRouteDefinition> routeDefinitionList = routeService.getRouteDefinitionList(param);
|
List<RouteDefinition> routeDefinitionList = routeService.getRouteDefinitionList(param);
|
||||||
if (CollectionUtils.isEmpty(routeDefinitionList)) {
|
if (CollectionUtils.isEmpty(routeDefinitionList)) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
@@ -74,10 +74,10 @@ public class LimitApi {
|
|||||||
return gatewayRouteDefinitions;
|
return gatewayRouteDefinitions;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<String> getRouteIdList(List<GatewayRouteDefinition> routeDefinitionList) {
|
private List<String> getRouteIdList(List<RouteDefinition> routeDefinitionList) {
|
||||||
return routeDefinitionList
|
return routeDefinitionList
|
||||||
.stream()
|
.stream()
|
||||||
.map(GatewayRouteDefinition::getId)
|
.map(RouteDefinition::getId)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,7 +1,6 @@
|
|||||||
package com.gitee.sop.adminserver.api.service.param;
|
package com.gitee.sop.adminserver.api.service.param;
|
||||||
|
|
||||||
import com.gitee.easyopen.doc.annotation.ApiDocField;
|
import com.gitee.easyopen.doc.annotation.ApiDocField;
|
||||||
import com.gitee.sop.adminserver.bean.GatewayRouteDefinition;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import javax.validation.constraints.NotBlank;
|
import javax.validation.constraints.NotBlank;
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
package com.gitee.sop.adminserver.api.service.result;
|
package com.gitee.sop.adminserver.api.service.result;
|
||||||
|
|
||||||
import com.gitee.sop.adminserver.api.isv.result.RoleVO;
|
import com.gitee.sop.adminserver.api.isv.result.RoleVO;
|
||||||
import com.gitee.sop.adminserver.bean.GatewayRouteDefinition;
|
import com.gitee.sop.adminserver.bean.RouteDefinition;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
|
||||||
@@ -12,6 +12,6 @@ import java.util.List;
|
|||||||
*/
|
*/
|
||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
public class RouteVO extends GatewayRouteDefinition {
|
public class RouteVO extends RouteDefinition {
|
||||||
private List<RoleVO> roles;
|
private List<RoleVO> roles;
|
||||||
}
|
}
|
||||||
|
@@ -11,7 +11,7 @@ import java.util.List;
|
|||||||
* @author tanghc
|
* @author tanghc
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
public class GatewayRouteDefinition {
|
public class RouteDefinition {
|
||||||
/**
|
/**
|
||||||
* 路由的Id
|
* 路由的Id
|
||||||
*/
|
*/
|
@@ -23,7 +23,7 @@ public class ServiceRouteInfo {
|
|||||||
private String description;
|
private String description;
|
||||||
|
|
||||||
@JSONField(serialize = false)
|
@JSONField(serialize = false)
|
||||||
private List<GatewayRouteDefinition> routeDefinitionList;
|
private List<RouteDefinition> routeDefinitionList;
|
||||||
|
|
||||||
/** 是否是自定义服务,1:是,0:否 */
|
/** 是否是自定义服务,1:是,0:否 */
|
||||||
private int custom;
|
private int custom;
|
||||||
|
@@ -4,7 +4,7 @@ import com.alibaba.fastjson.JSON;
|
|||||||
import com.alibaba.nacos.api.annotation.NacosInjected;
|
import com.alibaba.nacos.api.annotation.NacosInjected;
|
||||||
import com.alibaba.nacos.api.config.ConfigService;
|
import com.alibaba.nacos.api.config.ConfigService;
|
||||||
import com.gitee.sop.adminserver.api.service.param.RouteSearchParam;
|
import com.gitee.sop.adminserver.api.service.param.RouteSearchParam;
|
||||||
import com.gitee.sop.adminserver.bean.GatewayRouteDefinition;
|
import com.gitee.sop.adminserver.bean.RouteDefinition;
|
||||||
import com.gitee.sop.adminserver.bean.NacosConfigs;
|
import com.gitee.sop.adminserver.bean.NacosConfigs;
|
||||||
import com.gitee.sop.adminserver.bean.ServiceRouteInfo;
|
import com.gitee.sop.adminserver.bean.ServiceRouteInfo;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
@@ -24,7 +24,7 @@ public class RouteService {
|
|||||||
@NacosInjected
|
@NacosInjected
|
||||||
private ConfigService configService;
|
private ConfigService configService;
|
||||||
|
|
||||||
public List<GatewayRouteDefinition> getRouteDefinitionList(RouteSearchParam param) throws Exception {
|
public List<RouteDefinition> getRouteDefinitionList(RouteSearchParam param) throws Exception {
|
||||||
String serviceId = param.getServiceId();
|
String serviceId = param.getServiceId();
|
||||||
if (StringUtils.isBlank(serviceId)) {
|
if (StringUtils.isBlank(serviceId)) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
|
@@ -1 +1 @@
|
|||||||
<!DOCTYPE html><html><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1"><meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"><link rel=icon href=favicon.ico><title>SOP Admin</title><link href=static/css/chunk-elementUI.81cf475c.css rel=stylesheet><link href=static/css/chunk-libs.3dfb7769.css rel=stylesheet><link href=static/css/app.4f0872ef.css rel=stylesheet></head><body><noscript><strong>We're sorry but SOP Admin doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id=app></div><script>(function(e){function n(n){for(var r,c,o=n[0],f=n[1],i=n[2],l=0,h=[];l<o.length;l++)c=o[l],u[c]&&h.push(u[c][0]),u[c]=0;for(r in f)Object.prototype.hasOwnProperty.call(f,r)&&(e[r]=f[r]);d&&d(n);while(h.length)h.shift()();return a.push.apply(a,i||[]),t()}function t(){for(var e,n=0;n<a.length;n++){for(var t=a[n],r=!0,c=1;c<t.length;c++){var o=t[c];0!==u[o]&&(r=!1)}r&&(a.splice(n--,1),e=f(f.s=t[0]))}return e}var r={},c={runtime:0},u={runtime:0},a=[];function o(e){return f.p+"static/js/"+({}[e]||e)+"."+{"chunk-238a81e9":"5955f13d","chunk-25908fca":"b2f0b665","chunk-2d2085ef":"7c741493","chunk-2d221c34":"c8ef105a","chunk-37401378":"4e39ec9b","chunk-510c5a69":"93406082","chunk-6f78c9fe":"f1ed64fa","chunk-73b2dcec":"14f248eb","chunk-9b31c83a":"355cc725","chunk-9f479afe":"c1cbb02b","chunk-ea2e58a4":"f3f85b0e"}[e]+".js"}function f(n){if(r[n])return r[n].exports;var t=r[n]={i:n,l:!1,exports:{}};return e[n].call(t.exports,t,t.exports,f),t.l=!0,t.exports}f.e=function(e){var n=[],t={"chunk-238a81e9":1,"chunk-25908fca":1,"chunk-37401378":1,"chunk-510c5a69":1,"chunk-73b2dcec":1,"chunk-9b31c83a":1,"chunk-ea2e58a4":1};c[e]?n.push(c[e]):0!==c[e]&&t[e]&&n.push(c[e]=new Promise(function(n,t){for(var r="static/css/"+({}[e]||e)+"."+{"chunk-238a81e9":"e8e2beee","chunk-25908fca":"89ab33e8","chunk-2d2085ef":"31d6cfe0","chunk-2d221c34":"31d6cfe0","chunk-37401378":"a43114f3","chunk-510c5a69":"5e48e29a","chunk-6f78c9fe":"31d6cfe0","chunk-73b2dcec":"99cf6327","chunk-9b31c83a":"3b12267b","chunk-9f479afe":"31d6cfe0","chunk-ea2e58a4":"d10599db"}[e]+".css",u=f.p+r,a=document.getElementsByTagName("link"),o=0;o<a.length;o++){var i=a[o],l=i.getAttribute("data-href")||i.getAttribute("href");if("stylesheet"===i.rel&&(l===r||l===u))return n()}var h=document.getElementsByTagName("style");for(o=0;o<h.length;o++){i=h[o],l=i.getAttribute("data-href");if(l===r||l===u)return n()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=n,d.onerror=function(n){var r=n&&n.target&&n.target.src||u,a=new Error("Loading CSS chunk "+e+" failed.\n("+r+")");a.code="CSS_CHUNK_LOAD_FAILED",a.request=r,delete c[e],d.parentNode.removeChild(d),t(a)},d.href=u;var s=document.getElementsByTagName("head")[0];s.appendChild(d)}).then(function(){c[e]=0}));var r=u[e];if(0!==r)if(r)n.push(r[2]);else{var a=new Promise(function(n,t){r=u[e]=[n,t]});n.push(r[2]=a);var i,l=document.createElement("script");l.charset="utf-8",l.timeout=120,f.nc&&l.setAttribute("nonce",f.nc),l.src=o(e),i=function(n){l.onerror=l.onload=null,clearTimeout(h);var t=u[e];if(0!==t){if(t){var r=n&&("load"===n.type?"missing":n.type),c=n&&n.target&&n.target.src,a=new Error("Loading chunk "+e+" failed.\n("+r+": "+c+")");a.type=r,a.request=c,t[1](a)}u[e]=void 0}};var h=setTimeout(function(){i({type:"timeout",target:l})},12e4);l.onerror=l.onload=i,document.head.appendChild(l)}return Promise.all(n)},f.m=e,f.c=r,f.d=function(e,n,t){f.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:t})},f.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.t=function(e,n){if(1&n&&(e=f(e)),8&n)return e;if(4&n&&"object"===typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var r in e)f.d(t,r,function(n){return e[n]}.bind(null,r));return t},f.n=function(e){var n=e&&e.__esModule?function(){return e["default"]}:function(){return e};return f.d(n,"a",n),n},f.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},f.p="",f.oe=function(e){throw console.error(e),e};var i=window["webpackJsonp"]=window["webpackJsonp"]||[],l=i.push.bind(i);i.push=n,i=i.slice();for(var h=0;h<i.length;h++)n(i[h]);var d=l;t()})([]);</script><script src=static/js/chunk-elementUI.8ebdfbab.js></script><script src=static/js/chunk-libs.9cf9cc40.js></script><script src=static/js/app.4f45e42d.js></script></body></html>
|
<!DOCTYPE html><html><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1"><meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"><link rel=icon href=favicon.ico><title>SOP Admin</title><link href=static/css/chunk-elementUI.81cf475c.css rel=stylesheet><link href=static/css/chunk-libs.3dfb7769.css rel=stylesheet><link href=static/css/app.4f0872ef.css rel=stylesheet></head><body><noscript><strong>We're sorry but SOP Admin doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id=app></div><script>(function(e){function n(n){for(var r,c,o=n[0],f=n[1],i=n[2],l=0,h=[];l<o.length;l++)c=o[l],u[c]&&h.push(u[c][0]),u[c]=0;for(r in f)Object.prototype.hasOwnProperty.call(f,r)&&(e[r]=f[r]);d&&d(n);while(h.length)h.shift()();return a.push.apply(a,i||[]),t()}function t(){for(var e,n=0;n<a.length;n++){for(var t=a[n],r=!0,c=1;c<t.length;c++){var o=t[c];0!==u[o]&&(r=!1)}r&&(a.splice(n--,1),e=f(f.s=t[0]))}return e}var r={},c={runtime:0},u={runtime:0},a=[];function o(e){return f.p+"static/js/"+({}[e]||e)+"."+{"chunk-238a81e9":"5955f13d","chunk-25908fca":"b2f0b665","chunk-2d2085ef":"7c741493","chunk-2d221c34":"c8ef105a","chunk-37401378":"4e39ec9b","chunk-510c5a69":"93406082","chunk-6f78c9fe":"f1ed64fa","chunk-73b2dcec":"14f248eb","chunk-9b31c83a":"50cacf29","chunk-9f479afe":"c1cbb02b","chunk-ea2e58a4":"f3f85b0e"}[e]+".js"}function f(n){if(r[n])return r[n].exports;var t=r[n]={i:n,l:!1,exports:{}};return e[n].call(t.exports,t,t.exports,f),t.l=!0,t.exports}f.e=function(e){var n=[],t={"chunk-238a81e9":1,"chunk-25908fca":1,"chunk-37401378":1,"chunk-510c5a69":1,"chunk-73b2dcec":1,"chunk-9b31c83a":1,"chunk-ea2e58a4":1};c[e]?n.push(c[e]):0!==c[e]&&t[e]&&n.push(c[e]=new Promise(function(n,t){for(var r="static/css/"+({}[e]||e)+"."+{"chunk-238a81e9":"e8e2beee","chunk-25908fca":"89ab33e8","chunk-2d2085ef":"31d6cfe0","chunk-2d221c34":"31d6cfe0","chunk-37401378":"a43114f3","chunk-510c5a69":"5e48e29a","chunk-6f78c9fe":"31d6cfe0","chunk-73b2dcec":"99cf6327","chunk-9b31c83a":"3b12267b","chunk-9f479afe":"31d6cfe0","chunk-ea2e58a4":"d10599db"}[e]+".css",u=f.p+r,a=document.getElementsByTagName("link"),o=0;o<a.length;o++){var i=a[o],l=i.getAttribute("data-href")||i.getAttribute("href");if("stylesheet"===i.rel&&(l===r||l===u))return n()}var h=document.getElementsByTagName("style");for(o=0;o<h.length;o++){i=h[o],l=i.getAttribute("data-href");if(l===r||l===u)return n()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=n,d.onerror=function(n){var r=n&&n.target&&n.target.src||u,a=new Error("Loading CSS chunk "+e+" failed.\n("+r+")");a.code="CSS_CHUNK_LOAD_FAILED",a.request=r,delete c[e],d.parentNode.removeChild(d),t(a)},d.href=u;var s=document.getElementsByTagName("head")[0];s.appendChild(d)}).then(function(){c[e]=0}));var r=u[e];if(0!==r)if(r)n.push(r[2]);else{var a=new Promise(function(n,t){r=u[e]=[n,t]});n.push(r[2]=a);var i,l=document.createElement("script");l.charset="utf-8",l.timeout=120,f.nc&&l.setAttribute("nonce",f.nc),l.src=o(e),i=function(n){l.onerror=l.onload=null,clearTimeout(h);var t=u[e];if(0!==t){if(t){var r=n&&("load"===n.type?"missing":n.type),c=n&&n.target&&n.target.src,a=new Error("Loading chunk "+e+" failed.\n("+r+": "+c+")");a.type=r,a.request=c,t[1](a)}u[e]=void 0}};var h=setTimeout(function(){i({type:"timeout",target:l})},12e4);l.onerror=l.onload=i,document.head.appendChild(l)}return Promise.all(n)},f.m=e,f.c=r,f.d=function(e,n,t){f.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:t})},f.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.t=function(e,n){if(1&n&&(e=f(e)),8&n)return e;if(4&n&&"object"===typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var r in e)f.d(t,r,function(n){return e[n]}.bind(null,r));return t},f.n=function(e){var n=e&&e.__esModule?function(){return e["default"]}:function(){return e};return f.d(n,"a",n),n},f.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},f.p="",f.oe=function(e){throw console.error(e),e};var i=window["webpackJsonp"]=window["webpackJsonp"]||[],l=i.push.bind(i);i.push=n,i=i.slice();for(var h=0;h<i.length;h++)n(i[h]);var d=l;t()})([]);</script><script src=static/js/chunk-elementUI.8ebdfbab.js></script><script src=static/js/chunk-libs.9cf9cc40.js></script><script src=static/js/app.4f45e42d.js></script></body></html>
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -84,19 +84,10 @@
|
|||||||
<el-table-column
|
<el-table-column
|
||||||
prop="name"
|
prop="name"
|
||||||
label="接口名 (版本号)"
|
label="接口名 (版本号)"
|
||||||
width="200"
|
|
||||||
>
|
|
||||||
<template slot-scope="scope">
|
|
||||||
{{ scope.row.name + (scope.row.version ? ' (' + scope.row.version + ')' : '') }}
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column
|
|
||||||
prop="uri"
|
|
||||||
label="LoadBalance"
|
|
||||||
width="350"
|
width="350"
|
||||||
>
|
>
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
{{ scope.row.uri + scope.row.path }}
|
{{ scope.row.name + (scope.row.version ? ' (' + scope.row.version + ')' : '') }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
@@ -141,7 +132,6 @@
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
label="操作"
|
label="操作"
|
||||||
fixed="right"
|
|
||||||
width="100"
|
width="100"
|
||||||
>
|
>
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
|
@@ -6,10 +6,10 @@ package com.gitee.sop.gatewaycommon.bean;
|
|||||||
public abstract class AbstractTargetRoute<T> implements TargetRoute<T> {
|
public abstract class AbstractTargetRoute<T> implements TargetRoute<T> {
|
||||||
|
|
||||||
private ServiceRouteInfo serviceRouteInfo;
|
private ServiceRouteInfo serviceRouteInfo;
|
||||||
private GatewayRouteDefinition routeDefinition;
|
private RouteDefinition routeDefinition;
|
||||||
private T targetRoute;
|
private T targetRoute;
|
||||||
|
|
||||||
public AbstractTargetRoute(ServiceRouteInfo serviceRouteInfo, GatewayRouteDefinition routeDefinition, T targetRoute) {
|
public AbstractTargetRoute(ServiceRouteInfo serviceRouteInfo, RouteDefinition routeDefinition, T targetRoute) {
|
||||||
this.serviceRouteInfo = serviceRouteInfo;
|
this.serviceRouteInfo = serviceRouteInfo;
|
||||||
this.routeDefinition = routeDefinition;
|
this.routeDefinition = routeDefinition;
|
||||||
this.targetRoute = targetRoute;
|
this.targetRoute = targetRoute;
|
||||||
@@ -21,7 +21,7 @@ public abstract class AbstractTargetRoute<T> implements TargetRoute<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public GatewayRouteDefinition getRouteDefinition() {
|
public RouteDefinition getRouteDefinition() {
|
||||||
return routeDefinition;
|
return routeDefinition;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -9,7 +9,7 @@ import java.util.List;
|
|||||||
* @author tanghc
|
* @author tanghc
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
public class GatewayRouteDefinition {
|
public class RouteDefinition {
|
||||||
/**
|
/**
|
||||||
* 路由的Id(接口名+版本号),确保此id全局唯一
|
* 路由的Id(接口名+版本号),确保此id全局唯一
|
||||||
*/
|
*/
|
@@ -30,7 +30,7 @@ public class ServiceRouteInfo {
|
|||||||
*/
|
*/
|
||||||
private String md5;
|
private String md5;
|
||||||
|
|
||||||
private List<GatewayRouteDefinition> routeDefinitionList;
|
private List<RouteDefinition> routeDefinitionList;
|
||||||
|
|
||||||
public String fetchServiceIdLowerCase() {
|
public String fetchServiceIdLowerCase() {
|
||||||
return serviceId.toLowerCase();
|
return serviceId.toLowerCase();
|
||||||
|
@@ -17,7 +17,7 @@ public interface TargetRoute<T> {
|
|||||||
*
|
*
|
||||||
* @return 返回微服务路由对象
|
* @return 返回微服务路由对象
|
||||||
*/
|
*/
|
||||||
GatewayRouteDefinition getRouteDefinition();
|
RouteDefinition getRouteDefinition();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 返回网关路由对象
|
* 返回网关路由对象
|
||||||
|
@@ -2,14 +2,13 @@ package com.gitee.sop.gatewaycommon.gateway.route;
|
|||||||
|
|
||||||
import com.gitee.sop.gatewaycommon.bean.GatewayFilterDefinition;
|
import com.gitee.sop.gatewaycommon.bean.GatewayFilterDefinition;
|
||||||
import com.gitee.sop.gatewaycommon.bean.GatewayPredicateDefinition;
|
import com.gitee.sop.gatewaycommon.bean.GatewayPredicateDefinition;
|
||||||
import com.gitee.sop.gatewaycommon.bean.GatewayRouteDefinition;
|
import com.gitee.sop.gatewaycommon.bean.RouteDefinition;
|
||||||
import com.gitee.sop.gatewaycommon.bean.ServiceRouteInfo;
|
import com.gitee.sop.gatewaycommon.bean.ServiceRouteInfo;
|
||||||
import com.gitee.sop.gatewaycommon.manager.BaseRouteCache;
|
import com.gitee.sop.gatewaycommon.manager.BaseRouteCache;
|
||||||
import com.gitee.sop.gatewaycommon.manager.RouteRepository;
|
import com.gitee.sop.gatewaycommon.manager.RouteRepository;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.cloud.gateway.filter.FilterDefinition;
|
import org.springframework.cloud.gateway.filter.FilterDefinition;
|
||||||
import org.springframework.cloud.gateway.handler.predicate.PredicateDefinition;
|
import org.springframework.cloud.gateway.handler.predicate.PredicateDefinition;
|
||||||
import org.springframework.cloud.gateway.route.RouteDefinition;
|
|
||||||
|
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -26,8 +25,8 @@ public class GatewayRouteCache extends BaseRouteCache<GatewayTargetRoute> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected GatewayTargetRoute buildRouteDefinition(ServiceRouteInfo serviceRouteInfo, GatewayRouteDefinition gatewayRouteDefinition) {
|
protected GatewayTargetRoute buildRouteDefinition(ServiceRouteInfo serviceRouteInfo, RouteDefinition gatewayRouteDefinition) {
|
||||||
RouteDefinition routeDefinition = new RouteDefinition();
|
org.springframework.cloud.gateway.route.RouteDefinition routeDefinition = new org.springframework.cloud.gateway.route.RouteDefinition();
|
||||||
routeDefinition.setId(gatewayRouteDefinition.getId());
|
routeDefinition.setId(gatewayRouteDefinition.getId());
|
||||||
routeDefinition.setUri(URI.create(gatewayRouteDefinition.getUri() + "#" + gatewayRouteDefinition.getPath()));
|
routeDefinition.setUri(URI.create(gatewayRouteDefinition.getUri() + "#" + gatewayRouteDefinition.getPath()));
|
||||||
routeDefinition.setOrder(gatewayRouteDefinition.getOrder());
|
routeDefinition.setOrder(gatewayRouteDefinition.getOrder());
|
||||||
|
@@ -1,13 +1,12 @@
|
|||||||
package com.gitee.sop.gatewaycommon.gateway.route;
|
package com.gitee.sop.gatewaycommon.gateway.route;
|
||||||
|
|
||||||
import com.gitee.sop.gatewaycommon.bean.GatewayRouteDefinition;
|
import com.gitee.sop.gatewaycommon.bean.RouteDefinition;
|
||||||
import com.gitee.sop.gatewaycommon.bean.TargetRoute;
|
import com.gitee.sop.gatewaycommon.bean.TargetRoute;
|
||||||
import com.gitee.sop.gatewaycommon.manager.RouteRepository;
|
import com.gitee.sop.gatewaycommon.manager.RouteRepository;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.cloud.gateway.event.PredicateArgsEvent;
|
import org.springframework.cloud.gateway.event.PredicateArgsEvent;
|
||||||
import org.springframework.cloud.gateway.event.RefreshRoutesEvent;
|
import org.springframework.cloud.gateway.event.RefreshRoutesEvent;
|
||||||
import org.springframework.cloud.gateway.route.RouteDefinition;
|
|
||||||
import org.springframework.cloud.gateway.route.RouteDefinitionRepository;
|
import org.springframework.cloud.gateway.route.RouteDefinitionRepository;
|
||||||
import org.springframework.context.ApplicationEventPublisher;
|
import org.springframework.context.ApplicationEventPublisher;
|
||||||
import org.springframework.context.ApplicationEventPublisherAware;
|
import org.springframework.context.ApplicationEventPublisherAware;
|
||||||
@@ -38,8 +37,8 @@ public class GatewayRouteRepository implements ApplicationEventPublisherAware,
|
|||||||
private ApplicationEventPublisher publisher;
|
private ApplicationEventPublisher publisher;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Flux<RouteDefinition> getRouteDefinitions() {
|
public Flux<org.springframework.cloud.gateway.route.RouteDefinition> getRouteDefinitions() {
|
||||||
List<RouteDefinition> list = routes.values().parallelStream()
|
List<org.springframework.cloud.gateway.route.RouteDefinition> list = routes.values().parallelStream()
|
||||||
.map(TargetRoute::getTargetRouteDefinition)
|
.map(TargetRoute::getTargetRouteDefinition)
|
||||||
.filter(routeDefinition -> !routeDefinition.getId().contains("_first.route_"))
|
.filter(routeDefinition -> !routeDefinition.getId().contains("_first.route_"))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
@@ -47,7 +46,7 @@ public class GatewayRouteRepository implements ApplicationEventPublisherAware,
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Mono<Void> save(Mono<RouteDefinition> route) {
|
public Mono<Void> save(Mono<org.springframework.cloud.gateway.route.RouteDefinition> route) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -77,7 +76,7 @@ public class GatewayRouteRepository implements ApplicationEventPublisherAware,
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public String add(GatewayTargetRoute targetRoute) {
|
public String add(GatewayTargetRoute targetRoute) {
|
||||||
GatewayRouteDefinition baseRouteDefinition = targetRoute.getRouteDefinition();
|
RouteDefinition baseRouteDefinition = targetRoute.getRouteDefinition();
|
||||||
routes.put(baseRouteDefinition.getId(), targetRoute);
|
routes.put(baseRouteDefinition.getId(), targetRoute);
|
||||||
this.publisher.publishEvent(new RefreshRoutesEvent(this));
|
this.publisher.publishEvent(new RefreshRoutesEvent(this));
|
||||||
return "success";
|
return "success";
|
||||||
@@ -85,7 +84,7 @@ public class GatewayRouteRepository implements ApplicationEventPublisherAware,
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update(GatewayTargetRoute targetRoute) {
|
public void update(GatewayTargetRoute targetRoute) {
|
||||||
GatewayRouteDefinition baseRouteDefinition = targetRoute.getRouteDefinition();
|
RouteDefinition baseRouteDefinition = targetRoute.getRouteDefinition();
|
||||||
routes.put(baseRouteDefinition.getId(), targetRoute);
|
routes.put(baseRouteDefinition.getId(), targetRoute);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,16 +1,15 @@
|
|||||||
package com.gitee.sop.gatewaycommon.gateway.route;
|
package com.gitee.sop.gatewaycommon.gateway.route;
|
||||||
|
|
||||||
import com.gitee.sop.gatewaycommon.bean.AbstractTargetRoute;
|
import com.gitee.sop.gatewaycommon.bean.AbstractTargetRoute;
|
||||||
import com.gitee.sop.gatewaycommon.bean.GatewayRouteDefinition;
|
import com.gitee.sop.gatewaycommon.bean.RouteDefinition;
|
||||||
import com.gitee.sop.gatewaycommon.bean.ServiceRouteInfo;
|
import com.gitee.sop.gatewaycommon.bean.ServiceRouteInfo;
|
||||||
import org.springframework.cloud.gateway.route.RouteDefinition;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author tanghc
|
* @author tanghc
|
||||||
*/
|
*/
|
||||||
public class GatewayTargetRoute extends AbstractTargetRoute<RouteDefinition> {
|
public class GatewayTargetRoute extends AbstractTargetRoute<org.springframework.cloud.gateway.route.RouteDefinition> {
|
||||||
|
|
||||||
public GatewayTargetRoute(ServiceRouteInfo serviceRouteInfo, GatewayRouteDefinition routeDefinition, RouteDefinition targetRoute) {
|
public GatewayTargetRoute(ServiceRouteInfo serviceRouteInfo, RouteDefinition routeDefinition, org.springframework.cloud.gateway.route.RouteDefinition targetRoute) {
|
||||||
super(serviceRouteInfo, routeDefinition, targetRoute);
|
super(serviceRouteInfo, routeDefinition, targetRoute);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
package com.gitee.sop.gatewaycommon.manager;
|
package com.gitee.sop.gatewaycommon.manager;
|
||||||
|
|
||||||
import com.gitee.sop.gatewaycommon.bean.GatewayRouteDefinition;
|
import com.gitee.sop.gatewaycommon.bean.RouteDefinition;
|
||||||
import com.gitee.sop.gatewaycommon.bean.ServiceRouteInfo;
|
import com.gitee.sop.gatewaycommon.bean.ServiceRouteInfo;
|
||||||
import com.gitee.sop.gatewaycommon.bean.TargetRoute;
|
import com.gitee.sop.gatewaycommon.bean.TargetRoute;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@@ -31,7 +31,7 @@ public abstract class BaseRouteCache<T extends TargetRoute> implements RouteLoad
|
|||||||
* @param gatewayRouteDefinition 路由对象
|
* @param gatewayRouteDefinition 路由对象
|
||||||
* @return 返回目标路由对象
|
* @return 返回目标路由对象
|
||||||
*/
|
*/
|
||||||
protected abstract T buildRouteDefinition(ServiceRouteInfo serviceRouteInfo, GatewayRouteDefinition gatewayRouteDefinition);
|
protected abstract T buildRouteDefinition(ServiceRouteInfo serviceRouteInfo, RouteDefinition gatewayRouteDefinition);
|
||||||
|
|
||||||
public BaseRouteCache(RouteRepository<T> routeRepository) {
|
public BaseRouteCache(RouteRepository<T> routeRepository) {
|
||||||
this.routeRepository = routeRepository;
|
this.routeRepository = routeRepository;
|
||||||
@@ -47,8 +47,8 @@ public abstract class BaseRouteCache<T extends TargetRoute> implements RouteLoad
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
serviceIdMd5Map.put(serviceId, newMd5);
|
serviceIdMd5Map.put(serviceId, newMd5);
|
||||||
List<GatewayRouteDefinition> routeDefinitionList = serviceRouteInfo.getRouteDefinitionList();
|
List<RouteDefinition> routeDefinitionList = serviceRouteInfo.getRouteDefinitionList();
|
||||||
for (GatewayRouteDefinition gatewayRouteDefinition : routeDefinitionList) {
|
for (RouteDefinition gatewayRouteDefinition : routeDefinitionList) {
|
||||||
T routeDefinition = this.buildRouteDefinition(serviceRouteInfo, gatewayRouteDefinition);
|
T routeDefinition = this.buildRouteDefinition(serviceRouteInfo, gatewayRouteDefinition);
|
||||||
routeRepository.add(routeDefinition);
|
routeRepository.add(routeDefinition);
|
||||||
}
|
}
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
package com.gitee.sop.gatewaycommon.param;
|
package com.gitee.sop.gatewaycommon.param;
|
||||||
|
|
||||||
import com.gitee.sop.gatewaycommon.bean.GatewayRouteDefinition;
|
import com.gitee.sop.gatewaycommon.bean.RouteDefinition;
|
||||||
import com.gitee.sop.gatewaycommon.bean.TargetRoute;
|
import com.gitee.sop.gatewaycommon.bean.TargetRoute;
|
||||||
import com.gitee.sop.gatewaycommon.manager.RouteRepository;
|
import com.gitee.sop.gatewaycommon.manager.RouteRepository;
|
||||||
import com.gitee.sop.gatewaycommon.manager.RouteRepositoryContext;
|
import com.gitee.sop.gatewaycommon.manager.RouteRepositoryContext;
|
||||||
@@ -64,8 +64,8 @@ public abstract class BaseParamBuilder<T> implements ParamBuilder<T> {
|
|||||||
String nameVersion = Optional.ofNullable(apiParam.fetchNameVersion()).orElse(String.valueOf(System.currentTimeMillis()));
|
String nameVersion = Optional.ofNullable(apiParam.fetchNameVersion()).orElse(String.valueOf(System.currentTimeMillis()));
|
||||||
TargetRoute targetRoute = routeRepository.get(nameVersion);
|
TargetRoute targetRoute = routeRepository.get(nameVersion);
|
||||||
Integer ignoreValidate = Optional.ofNullable(targetRoute)
|
Integer ignoreValidate = Optional.ofNullable(targetRoute)
|
||||||
.map(t -> t.getRouteDefinition())
|
.map(TargetRoute::getRouteDefinition)
|
||||||
.map(GatewayRouteDefinition::getIgnoreValidate)
|
.map(RouteDefinition::getIgnoreValidate)
|
||||||
// 默认不忽略
|
// 默认不忽略
|
||||||
.orElse(BooleanUtils.toInteger(false));
|
.orElse(BooleanUtils.toInteger(false));
|
||||||
apiParam.setIgnoreValidate(BooleanUtils.toBoolean(ignoreValidate));
|
apiParam.setIgnoreValidate(BooleanUtils.toBoolean(ignoreValidate));
|
||||||
|
@@ -5,7 +5,7 @@ import com.alibaba.fastjson.JSONObject;
|
|||||||
import com.gitee.sop.gatewaycommon.bean.ApiConfig;
|
import com.gitee.sop.gatewaycommon.bean.ApiConfig;
|
||||||
import com.gitee.sop.gatewaycommon.bean.ApiContext;
|
import com.gitee.sop.gatewaycommon.bean.ApiContext;
|
||||||
import com.gitee.sop.gatewaycommon.bean.ErrorDefinition;
|
import com.gitee.sop.gatewaycommon.bean.ErrorDefinition;
|
||||||
import com.gitee.sop.gatewaycommon.bean.GatewayRouteDefinition;
|
import com.gitee.sop.gatewaycommon.bean.RouteDefinition;
|
||||||
import com.gitee.sop.gatewaycommon.bean.Isv;
|
import com.gitee.sop.gatewaycommon.bean.Isv;
|
||||||
import com.gitee.sop.gatewaycommon.bean.ServiceRouteInfo;
|
import com.gitee.sop.gatewaycommon.bean.ServiceRouteInfo;
|
||||||
import com.gitee.sop.gatewaycommon.bean.SopConstants;
|
import com.gitee.sop.gatewaycommon.bean.SopConstants;
|
||||||
@@ -39,18 +39,18 @@ public abstract class BaseExecutorAdapter<T, R> implements ResultExecutor<T, R>
|
|||||||
private static final ErrorMeta ISP_BIZ_ERROR = ErrorEnum.BIZ_ERROR.getErrorMeta();
|
private static final ErrorMeta ISP_BIZ_ERROR = ErrorEnum.BIZ_ERROR.getErrorMeta();
|
||||||
private static final ErrorMeta ISV_MISSING_METHOD_META = ErrorEnum.ISV_MISSING_METHOD.getErrorMeta();
|
private static final ErrorMeta ISV_MISSING_METHOD_META = ErrorEnum.ISV_MISSING_METHOD.getErrorMeta();
|
||||||
|
|
||||||
public static final String GATEWAY_CODE_NAME = "code";
|
private static final String GATEWAY_CODE_NAME = "code";
|
||||||
public static final String GATEWAY_MSG_NAME = "msg";
|
private static final String GATEWAY_MSG_NAME = "msg";
|
||||||
public static final String ARRAY_START = "[";
|
private static final String ARRAY_START = "[";
|
||||||
public static final String ARRAY_END = "]";
|
private static final String ARRAY_END = "]";
|
||||||
public static final String ROOT_JSON = "{'items':%s}".replace("'", "\"");
|
private static final String ROOT_JSON = "{'items':%s}".replace("'", "\"");
|
||||||
public static final String ERROR_METHOD = "error";
|
private static final String ERROR_METHOD = "error";
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取业务方约定的返回码
|
* 获取业务方约定的返回码
|
||||||
*
|
*
|
||||||
* @param t
|
* @param t request
|
||||||
* @return 返回返回码
|
* @return 返回返回码
|
||||||
*/
|
*/
|
||||||
public abstract int getResponseStatus(T t);
|
public abstract int getResponseStatus(T t);
|
||||||
@@ -58,15 +58,15 @@ public abstract class BaseExecutorAdapter<T, R> implements ResultExecutor<T, R>
|
|||||||
/**
|
/**
|
||||||
* 获取微服务端的错误信息
|
* 获取微服务端的错误信息
|
||||||
*
|
*
|
||||||
* @param t
|
* @param t request
|
||||||
* @return
|
* @return 返回错误信息
|
||||||
*/
|
*/
|
||||||
public abstract String getResponseErrorMessage(T t);
|
public abstract String getResponseErrorMessage(T t);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 返回Api参数
|
* 返回Api参数
|
||||||
*
|
*
|
||||||
* @param t
|
* @param t request
|
||||||
* @return 返回api参数
|
* @return 返回api参数
|
||||||
*/
|
*/
|
||||||
public abstract Map<String, Object> getApiParam(T t);
|
public abstract Map<String, Object> getApiParam(T t);
|
||||||
@@ -139,7 +139,7 @@ public abstract class BaseExecutorAdapter<T, R> implements ResultExecutor<T, R>
|
|||||||
return defaultSetting;
|
return defaultSetting;
|
||||||
}
|
}
|
||||||
ApiInfo apiInfo = this.getApiInfo(request);
|
ApiInfo apiInfo = this.getApiInfo(request);
|
||||||
GatewayRouteDefinition baseRouteDefinition = apiInfo.gatewayRouteDefinition;
|
RouteDefinition baseRouteDefinition = apiInfo.gatewayRouteDefinition;
|
||||||
return Optional.ofNullable(baseRouteDefinition)
|
return Optional.ofNullable(baseRouteDefinition)
|
||||||
.map(routeDefinition -> {
|
.map(routeDefinition -> {
|
||||||
int mergeResult = baseRouteDefinition.getMergeResult();
|
int mergeResult = baseRouteDefinition.getMergeResult();
|
||||||
@@ -160,8 +160,8 @@ public abstract class BaseExecutorAdapter<T, R> implements ResultExecutor<T, R>
|
|||||||
.map(ServiceRouteInfo::getServiceId)
|
.map(ServiceRouteInfo::getServiceId)
|
||||||
.orElse(SopConstants.UNKNOWN_SERVICE);
|
.orElse(SopConstants.UNKNOWN_SERVICE);
|
||||||
|
|
||||||
GatewayRouteDefinition baseRouteDefinition = Optional.ofNullable(targetRoute)
|
RouteDefinition baseRouteDefinition = Optional.ofNullable(targetRoute)
|
||||||
.map(route -> route.getRouteDefinition())
|
.map(TargetRoute::getRouteDefinition)
|
||||||
.orElse(null);
|
.orElse(null);
|
||||||
|
|
||||||
ApiInfo apiInfo = new ApiInfo();
|
ApiInfo apiInfo = new ApiInfo();
|
||||||
@@ -276,7 +276,7 @@ public abstract class BaseExecutorAdapter<T, R> implements ResultExecutor<T, R>
|
|||||||
private String name;
|
private String name;
|
||||||
private String version;
|
private String version;
|
||||||
private String serviceId;
|
private String serviceId;
|
||||||
private GatewayRouteDefinition gatewayRouteDefinition;
|
private RouteDefinition gatewayRouteDefinition;
|
||||||
}
|
}
|
||||||
|
|
||||||
enum ErrorType {
|
enum ErrorType {
|
||||||
|
@@ -2,7 +2,7 @@ package com.gitee.sop.gatewaycommon.validate;
|
|||||||
|
|
||||||
import com.gitee.sop.gatewaycommon.bean.ApiConfig;
|
import com.gitee.sop.gatewaycommon.bean.ApiConfig;
|
||||||
import com.gitee.sop.gatewaycommon.bean.ApiContext;
|
import com.gitee.sop.gatewaycommon.bean.ApiContext;
|
||||||
import com.gitee.sop.gatewaycommon.bean.GatewayRouteDefinition;
|
import com.gitee.sop.gatewaycommon.bean.RouteDefinition;
|
||||||
import com.gitee.sop.gatewaycommon.bean.Isv;
|
import com.gitee.sop.gatewaycommon.bean.Isv;
|
||||||
import com.gitee.sop.gatewaycommon.bean.RouteConfig;
|
import com.gitee.sop.gatewaycommon.bean.RouteConfig;
|
||||||
import com.gitee.sop.gatewaycommon.bean.TargetRoute;
|
import com.gitee.sop.gatewaycommon.bean.TargetRoute;
|
||||||
@@ -215,7 +215,7 @@ public class ApiValidator implements Validator {
|
|||||||
protected void checkPermission(ApiParam apiParam) {
|
protected void checkPermission(ApiParam apiParam) {
|
||||||
String routeId = apiParam.fetchNameVersion();
|
String routeId = apiParam.fetchNameVersion();
|
||||||
TargetRoute targetRoute = RouteRepositoryContext.getRouteRepository().get(routeId);
|
TargetRoute targetRoute = RouteRepositoryContext.getRouteRepository().get(routeId);
|
||||||
GatewayRouteDefinition routeDefinition = targetRoute.getRouteDefinition();
|
RouteDefinition routeDefinition = targetRoute.getRouteDefinition();
|
||||||
boolean needCheckPermission = BooleanUtils.toBoolean(routeDefinition.getPermission());
|
boolean needCheckPermission = BooleanUtils.toBoolean(routeDefinition.getPermission());
|
||||||
if (needCheckPermission) {
|
if (needCheckPermission) {
|
||||||
String appKey = apiParam.fetchAppKey();
|
String appKey = apiParam.fetchAppKey();
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
package com.gitee.sop.gatewaycommon.zuul.route;
|
package com.gitee.sop.gatewaycommon.zuul.route;
|
||||||
|
|
||||||
import com.gitee.sop.gatewaycommon.bean.GatewayRouteDefinition;
|
import com.gitee.sop.gatewaycommon.bean.RouteDefinition;
|
||||||
import com.gitee.sop.gatewaycommon.bean.ServiceRouteInfo;
|
import com.gitee.sop.gatewaycommon.bean.ServiceRouteInfo;
|
||||||
import com.gitee.sop.gatewaycommon.manager.BaseRouteCache;
|
import com.gitee.sop.gatewaycommon.manager.BaseRouteCache;
|
||||||
import com.gitee.sop.gatewaycommon.manager.RouteRepository;
|
import com.gitee.sop.gatewaycommon.manager.RouteRepository;
|
||||||
@@ -20,7 +20,7 @@ public class ZuulRouteCache extends BaseRouteCache<ZuulTargetRoute> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ZuulTargetRoute buildRouteDefinition(ServiceRouteInfo serviceRouteInfo, GatewayRouteDefinition gatewayRouteDefinition) {
|
protected ZuulTargetRoute buildRouteDefinition(ServiceRouteInfo serviceRouteInfo, RouteDefinition gatewayRouteDefinition) {
|
||||||
Route route = new Route(
|
Route route = new Route(
|
||||||
gatewayRouteDefinition.getId()
|
gatewayRouteDefinition.getId()
|
||||||
, gatewayRouteDefinition.getPath()
|
, gatewayRouteDefinition.getPath()
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
package com.gitee.sop.gatewaycommon.zuul.route;
|
package com.gitee.sop.gatewaycommon.zuul.route;
|
||||||
|
|
||||||
import com.gitee.sop.gatewaycommon.bean.AbstractTargetRoute;
|
import com.gitee.sop.gatewaycommon.bean.AbstractTargetRoute;
|
||||||
import com.gitee.sop.gatewaycommon.bean.GatewayRouteDefinition;
|
import com.gitee.sop.gatewaycommon.bean.RouteDefinition;
|
||||||
import com.gitee.sop.gatewaycommon.bean.ServiceRouteInfo;
|
import com.gitee.sop.gatewaycommon.bean.ServiceRouteInfo;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import org.springframework.cloud.netflix.zuul.filters.Route;
|
import org.springframework.cloud.netflix.zuul.filters.Route;
|
||||||
@@ -12,7 +12,7 @@ import org.springframework.cloud.netflix.zuul.filters.Route;
|
|||||||
@Getter
|
@Getter
|
||||||
public class ZuulTargetRoute extends AbstractTargetRoute<Route> {
|
public class ZuulTargetRoute extends AbstractTargetRoute<Route> {
|
||||||
|
|
||||||
public ZuulTargetRoute(ServiceRouteInfo serviceRouteInfo, GatewayRouteDefinition routeDefinition, Route targetRoute) {
|
public ZuulTargetRoute(ServiceRouteInfo serviceRouteInfo, RouteDefinition routeDefinition, Route targetRoute) {
|
||||||
super(serviceRouteInfo, routeDefinition, targetRoute);
|
super(serviceRouteInfo, routeDefinition, targetRoute);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
package com.gitee.sop.servercommon.bean;
|
package com.gitee.sop.servercommon.bean;
|
||||||
|
|
||||||
import com.gitee.sop.servercommon.route.GatewayRouteDefinition;
|
import com.gitee.sop.servercommon.route.RouteDefinition;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -12,7 +12,7 @@ import java.util.List;
|
|||||||
public class ServiceApiInfo {
|
public class ServiceApiInfo {
|
||||||
private String serviceId;
|
private String serviceId;
|
||||||
private List<ApiMeta> apis;
|
private List<ApiMeta> apis;
|
||||||
private List<GatewayRouteDefinition> routeDefinitionList;
|
private List<RouteDefinition> routeDefinitionList;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public static class ApiMeta {
|
public static class ApiMeta {
|
||||||
|
@@ -3,7 +3,7 @@ package com.gitee.sop.servercommon.manager;
|
|||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.gitee.sop.servercommon.bean.ServiceApiInfo;
|
import com.gitee.sop.servercommon.bean.ServiceApiInfo;
|
||||||
import com.gitee.sop.servercommon.route.GatewayPredicateDefinition;
|
import com.gitee.sop.servercommon.route.GatewayPredicateDefinition;
|
||||||
import com.gitee.sop.servercommon.route.GatewayRouteDefinition;
|
import com.gitee.sop.servercommon.route.RouteDefinition;
|
||||||
import com.gitee.sop.servercommon.route.ServiceRouteInfo;
|
import com.gitee.sop.servercommon.route.ServiceRouteInfo;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
@@ -59,10 +59,10 @@ public class ServiceRouteInfoBuilder {
|
|||||||
*/
|
*/
|
||||||
protected ServiceRouteInfo buildServiceGatewayInfo(ServiceApiInfo serviceApiInfo) {
|
protected ServiceRouteInfo buildServiceGatewayInfo(ServiceApiInfo serviceApiInfo) {
|
||||||
List<ServiceApiInfo.ApiMeta> apis = serviceApiInfo.getApis();
|
List<ServiceApiInfo.ApiMeta> apis = serviceApiInfo.getApis();
|
||||||
List<GatewayRouteDefinition> routeDefinitionList = new ArrayList<>(apis.size());
|
List<RouteDefinition> routeDefinitionList = new ArrayList<>(apis.size());
|
||||||
routeDefinitionList.add(this.buildReadBodyRouteDefinition(serviceApiInfo));
|
routeDefinitionList.add(this.buildReadBodyRouteDefinition(serviceApiInfo));
|
||||||
for (ServiceApiInfo.ApiMeta apiMeta : apis) {
|
for (ServiceApiInfo.ApiMeta apiMeta : apis) {
|
||||||
GatewayRouteDefinition gatewayRouteDefinition = this.buildGatewayRouteDefinition(serviceApiInfo, apiMeta);
|
RouteDefinition gatewayRouteDefinition = this.buildGatewayRouteDefinition(serviceApiInfo, apiMeta);
|
||||||
routeDefinitionList.add(gatewayRouteDefinition);
|
routeDefinitionList.add(gatewayRouteDefinition);
|
||||||
}
|
}
|
||||||
ServiceRouteInfo serviceRouteInfo = new ServiceRouteInfo();
|
ServiceRouteInfo serviceRouteInfo = new ServiceRouteInfo();
|
||||||
@@ -79,7 +79,7 @@ public class ServiceRouteInfoBuilder {
|
|||||||
* @param routeDefinitionList 路由列表
|
* @param routeDefinitionList 路由列表
|
||||||
* @return 返回MD5
|
* @return 返回MD5
|
||||||
*/
|
*/
|
||||||
protected String buildMd5(List<GatewayRouteDefinition> routeDefinitionList) {
|
protected String buildMd5(List<RouteDefinition> routeDefinitionList) {
|
||||||
List<String> routeIdList = routeDefinitionList.stream()
|
List<String> routeIdList = routeDefinitionList.stream()
|
||||||
.map(JSON::toJSONString)
|
.map(JSON::toJSONString)
|
||||||
.sorted()
|
.sorted()
|
||||||
@@ -88,8 +88,8 @@ public class ServiceRouteInfoBuilder {
|
|||||||
return DigestUtils.md5DigestAsHex(md5Source.getBytes(StandardCharsets.UTF_8));
|
return DigestUtils.md5DigestAsHex(md5Source.getBytes(StandardCharsets.UTF_8));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected GatewayRouteDefinition buildGatewayRouteDefinition(ServiceApiInfo serviceApiInfo, ServiceApiInfo.ApiMeta apiMeta) {
|
protected RouteDefinition buildGatewayRouteDefinition(ServiceApiInfo serviceApiInfo, ServiceApiInfo.ApiMeta apiMeta) {
|
||||||
GatewayRouteDefinition gatewayRouteDefinition = new GatewayRouteDefinition();
|
RouteDefinition gatewayRouteDefinition = new RouteDefinition();
|
||||||
// 唯一id规则:接口名 + 版本号
|
// 唯一id规则:接口名 + 版本号
|
||||||
String routeId = apiMeta.fetchNameVersion();
|
String routeId = apiMeta.fetchNameVersion();
|
||||||
this.checkPath(routeId, "接口定义(" + routeId + ")不能有斜杠字符'/'");
|
this.checkPath(routeId, "接口定义(" + routeId + ")不能有斜杠字符'/'");
|
||||||
@@ -119,8 +119,8 @@ public class ServiceRouteInfoBuilder {
|
|||||||
*
|
*
|
||||||
* @return 返回路由定义
|
* @return 返回路由定义
|
||||||
*/
|
*/
|
||||||
protected GatewayRouteDefinition buildReadBodyRouteDefinition(ServiceApiInfo serviceApiInfo) {
|
protected RouteDefinition buildReadBodyRouteDefinition(ServiceApiInfo serviceApiInfo) {
|
||||||
GatewayRouteDefinition readBodyRouteDefinition = this.buildGatewayRouteDefinition(serviceApiInfo, FIRST_API_META);
|
RouteDefinition readBodyRouteDefinition = this.buildGatewayRouteDefinition(serviceApiInfo, FIRST_API_META);
|
||||||
readBodyRouteDefinition.setOrder(Integer.MIN_VALUE);
|
readBodyRouteDefinition.setOrder(Integer.MIN_VALUE);
|
||||||
|
|
||||||
readBodyRouteDefinition.setPredicates(this.buildPredicates(FIRST_API_META));
|
readBodyRouteDefinition.setPredicates(this.buildPredicates(FIRST_API_META));
|
||||||
|
@@ -9,7 +9,7 @@ import java.util.List;
|
|||||||
* @author tanghc
|
* @author tanghc
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
public class GatewayRouteDefinition {
|
public class RouteDefinition {
|
||||||
/**
|
/**
|
||||||
* 路由的Id(接口名+版本号),确保此id全局唯一
|
* 路由的Id(接口名+版本号),确保此id全局唯一
|
||||||
*/
|
*/
|
@@ -31,6 +31,6 @@ public class ServiceRouteInfo {
|
|||||||
private String md5;
|
private String md5;
|
||||||
|
|
||||||
@JSONField(serialize = false)
|
@JSONField(serialize = false)
|
||||||
private List<GatewayRouteDefinition> routeDefinitionList;
|
private List<RouteDefinition> routeDefinitionList;
|
||||||
|
|
||||||
}
|
}
|
@@ -7,7 +7,7 @@ import com.gitee.fastmybatis.core.query.Query;
|
|||||||
import com.gitee.sop.gateway.mapper.ConfigRouteBaseMapper;
|
import com.gitee.sop.gateway.mapper.ConfigRouteBaseMapper;
|
||||||
import com.gitee.sop.gateway.mapper.ConfigRouteLimitMapper;
|
import com.gitee.sop.gateway.mapper.ConfigRouteLimitMapper;
|
||||||
import com.gitee.sop.gatewaycommon.bean.ChannelMsg;
|
import com.gitee.sop.gatewaycommon.bean.ChannelMsg;
|
||||||
import com.gitee.sop.gatewaycommon.bean.GatewayRouteDefinition;
|
import com.gitee.sop.gatewaycommon.bean.RouteDefinition;
|
||||||
import com.gitee.sop.gatewaycommon.bean.NacosConfigs;
|
import com.gitee.sop.gatewaycommon.bean.NacosConfigs;
|
||||||
import com.gitee.sop.gatewaycommon.bean.RouteConfig;
|
import com.gitee.sop.gatewaycommon.bean.RouteConfig;
|
||||||
import com.gitee.sop.gatewaycommon.bean.TargetRoute;
|
import com.gitee.sop.gatewaycommon.bean.TargetRoute;
|
||||||
@@ -47,7 +47,6 @@ public class DbRouteConfigManager extends DefaultRouteConfigManager {
|
|||||||
|
|
||||||
Query query = new Query();
|
Query query = new Query();
|
||||||
configRouteBaseMapper.list(query)
|
configRouteBaseMapper.list(query)
|
||||||
.stream()
|
|
||||||
.forEach(configRouteBase -> {
|
.forEach(configRouteBase -> {
|
||||||
String key = configRouteBase.getRouteId();
|
String key = configRouteBase.getRouteId();
|
||||||
putVal(key, configRouteBase);
|
putVal(key, configRouteBase);
|
||||||
@@ -56,14 +55,13 @@ public class DbRouteConfigManager extends DefaultRouteConfigManager {
|
|||||||
|
|
||||||
protected void loadAllRoute() {
|
protected void loadAllRoute() {
|
||||||
Collection<? extends TargetRoute> targetRoutes = RouteRepositoryContext.getRouteRepository().getAll();
|
Collection<? extends TargetRoute> targetRoutes = RouteRepositoryContext.getRouteRepository().getAll();
|
||||||
targetRoutes.stream()
|
targetRoutes.forEach(targetRoute -> {
|
||||||
.forEach(targetRoute -> {
|
RouteDefinition routeDefinition = targetRoute.getRouteDefinition();
|
||||||
GatewayRouteDefinition routeDefinition = targetRoute.getRouteDefinition();
|
|
||||||
initRouteConfig(routeDefinition);
|
initRouteConfig(routeDefinition);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void initRouteConfig(GatewayRouteDefinition routeDefinition) {
|
protected void initRouteConfig(RouteDefinition routeDefinition) {
|
||||||
String routeId = routeDefinition.getId();
|
String routeId = routeDefinition.getId();
|
||||||
RouteConfig routeConfig = newRouteConfig();
|
RouteConfig routeConfig = newRouteConfig();
|
||||||
routeConfig.setRouteId(routeId);
|
routeConfig.setRouteId(routeId);
|
||||||
|
Reference in New Issue
Block a user