TODO: 动态泛化参数设置
This commit is contained in:
parent
606dde8aba
commit
10b79b527b
|
@ -3,7 +3,6 @@ package cn.ecpark.service.usergw.biz.filters;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
||||||
import org.apache.dubbo.config.ApplicationConfig;
|
import org.apache.dubbo.config.ApplicationConfig;
|
||||||
import org.apache.dubbo.config.ProtocolConfig;
|
import org.apache.dubbo.config.ProtocolConfig;
|
||||||
import org.apache.dubbo.config.ReferenceConfig;
|
import org.apache.dubbo.config.ReferenceConfig;
|
||||||
|
@ -20,12 +19,6 @@ import com.alibaba.fastjson.*;
|
||||||
|
|
||||||
import reactor.core.publisher.Mono;
|
import reactor.core.publisher.Mono;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
public class DubboFilter implements GlobalFilter, Ordered {
|
public class DubboFilter implements GlobalFilter, Ordered {
|
||||||
|
|
||||||
|
@ -37,8 +30,7 @@ public class DubboFilter implements GlobalFilter, Ordered {
|
||||||
@Override
|
@Override
|
||||||
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
|
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
|
||||||
exchange.getRequest();
|
exchange.getRequest();
|
||||||
ReferenceConfig<GenericService> reference = new
|
ReferenceConfig<GenericService> reference = new ReferenceConfig<GenericService>(); // 该实例很重量,里面封装了所有与注册中心及服务提供方连接,请缓存
|
||||||
ReferenceConfig<GenericService>(); // 该实例很重量,里面封装了所有与注册中心及服务提供方连接,请缓存
|
|
||||||
|
|
||||||
reference.setApplication(new ApplicationConfig("dubbo-exchange"));
|
reference.setApplication(new ApplicationConfig("dubbo-exchange"));
|
||||||
// reference.setRegistry(new RegistryConfig("zookeeper://127.0.0.1:2181"));
|
// reference.setRegistry(new RegistryConfig("zookeeper://127.0.0.1:2181"));
|
||||||
|
@ -49,13 +41,11 @@ public class DubboFilter implements GlobalFilter, Ordered {
|
||||||
ReferenceConfigCache cache = ReferenceConfigCache.getCache();
|
ReferenceConfigCache cache = ReferenceConfigCache.getCache();
|
||||||
GenericService gs = cache.get(reference);
|
GenericService gs = cache.get(reference);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Object result = gs.$invoke("Hello", new String[] {}, new Object[] {});
|
Object result = gs.$invoke("Hello", new String[] {}, new Object[] {});
|
||||||
if (result != null) {
|
if (result != null) {
|
||||||
ServerHttpResponse response = exchange.getResponse();
|
ServerHttpResponse response = exchange.getResponse();
|
||||||
return response.writeWith( Mono.just(response.bufferFactory().wrap(ByteBuffer.wrap(JSON.toJSONString(result).getBytes()))));
|
return response.writeWith(
|
||||||
|
Mono.just(response.bufferFactory().wrap(ByteBuffer.wrap(JSON.toJSONString(result).getBytes()))));
|
||||||
}
|
}
|
||||||
return chain.filter(exchange);
|
return chain.filter(exchange);
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,6 +45,7 @@ public class ConfigGateway implements RouteDefinitionLocator {
|
||||||
private Http2Dubbo http2Dubbo;
|
private Http2Dubbo http2Dubbo;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
public Flux<RouteDefinition> getRouteDefinitions() {
|
public Flux<RouteDefinition> getRouteDefinitions() {
|
||||||
// WebFluxConfigurationSupport a;
|
// WebFluxConfigurationSupport a;
|
||||||
|
|
||||||
|
@ -113,9 +114,33 @@ public class ConfigGateway implements RouteDefinitionLocator {
|
||||||
|
|
||||||
Object unknownRoutes = configDefault.get("routes");
|
Object unknownRoutes = configDefault.get("routes");
|
||||||
if (unknownRoutes != null) {
|
if (unknownRoutes != null) {
|
||||||
List<LinkedHashMap> routes = (ArrayList<LinkedHashMap>) unknownRoutes;
|
List<LinkedHashMap<String, List<String>>> routes = (ArrayList<LinkedHashMap<String, List<String>>>) unknownRoutes;
|
||||||
for (LinkedHashMap iter : routes) {
|
for (LinkedHashMap<String, List<String>> iter : routes) {
|
||||||
RouteDefinition rd = new RouteDefinition();
|
RouteDefinition rd = new RouteDefinition();
|
||||||
|
|
||||||
|
// 设置基础属性
|
||||||
|
this.ParseAndSetBase(rd, iter);
|
||||||
|
|
||||||
|
// predicates: 下的相关属性
|
||||||
|
this.ParseAndAddPredicates(predicates, iter, "predicates");
|
||||||
|
|
||||||
|
// filters: 下的相关属性
|
||||||
|
this.ParseAndAddFilters(filters, iter, "filters");
|
||||||
|
|
||||||
|
rd.setPredicates(predicates);
|
||||||
|
rd.setFilters(filters);
|
||||||
|
|
||||||
|
RDList.add(rd);
|
||||||
|
}
|
||||||
|
|
||||||
|
return RDList;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ParseAndSetBase(RouteDefinition rd, LinkedHashMap<String, List<String>> iter) {
|
||||||
// 设置id
|
// 设置id
|
||||||
Object id = iter.get("id");
|
Object id = iter.get("id");
|
||||||
if (id != null) {
|
if (id != null) {
|
||||||
|
@ -133,37 +158,26 @@ public class ConfigGateway implements RouteDefinitionLocator {
|
||||||
if (order != null) {
|
if (order != null) {
|
||||||
rd.setOrder((int) order);
|
rd.setOrder((int) order);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// predicates: 下的相关属性
|
private void ParseAndAddPredicates(List<PredicateDefinition> predicates, LinkedHashMap<String, List<String>> iter, String yamlField) {
|
||||||
List<String> unknownPredicatesYaml = (ArrayList<String>) iter.get("predicates");
|
List<String> predicatesYaml = iter.get(yamlField);
|
||||||
if (unknownPredicatesYaml != null) {
|
if (predicatesYaml != null) {
|
||||||
List<String> predicatesYaml = (ArrayList<String>) unknownPredicatesYaml;
|
|
||||||
for (String predicateString : predicatesYaml) {
|
for (String predicateString : predicatesYaml) {
|
||||||
predicates.add(new PredicateDefinition(predicateString));
|
predicates.add(new PredicateDefinition(predicateString));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// filters: 下的相关属性
|
private void ParseAndAddFilters(List<FilterDefinition> filters, LinkedHashMap<String, List<String>> iter, String yamlField) {
|
||||||
List<String> unknownFiltersYaml = (ArrayList<String>) iter.get("filters");
|
List<String> filtersYaml = iter.get(yamlField);
|
||||||
if (unknownFiltersYaml != null) {
|
if (filtersYaml != null) {
|
||||||
List<String> filtersYaml = (ArrayList<String>) unknownFiltersYaml;
|
|
||||||
for (String filterString : filtersYaml) {
|
for (String filterString : filtersYaml) {
|
||||||
filters.add(new FilterDefinition(filterString));
|
filters.add(new FilterDefinition(filterString));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rd.setPredicates(predicates);
|
|
||||||
rd.setFilters(filters);
|
|
||||||
|
|
||||||
RDList.add(rd);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return RDList;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void createHttp2Dubbo(Map<String, Object> configDubbo) {
|
private void createHttp2Dubbo(Map<String, Object> configDubbo) {
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,6 @@ dubbo:
|
||||||
routes:
|
routes:
|
||||||
- id: test
|
- id: test
|
||||||
path: /dubbo/hello
|
path: /dubbo/hello
|
||||||
interface: com.xxx.xxx
|
interface: ocean.demo.api.IExchange
|
||||||
version: 2.0.0
|
version: 1.0.0
|
||||||
|
|
Loading…
Reference in New Issue
Block a user