in shenyu-kubernetes-controller/src/main/java/org/apache/shenyu/k8s/parser/GrpcParser.java [354:405]
private IngressConfiguration getRpcRouteConfig(final List<GrpcUpstream> grpcUpStream, final Map<String, String> annotations) {
final ConditionData conditionData = new ConditionData();
conditionData.setParamName("grpc");
conditionData.setParamType(ParamTypeEnum.URI.getName());
conditionData.setOperator(OperatorEnum.PATH_PATTERN.getAlias());
conditionData.setParamValue("/**");
final SelectorData selectorData = SelectorData.builder()
.name("grpc-selector")
.sort(Integer.MAX_VALUE)
.conditionList(Collections.singletonList(conditionData))
.handle(GsonUtils.getInstance().toJson(grpcUpStream))
.enabled(true)
.id(IngressConstants.ID)
.pluginName(PluginEnum.GRPC.getName())
.pluginId(String.valueOf(PluginEnum.GRPC.getCode()))
.logged(false)
.continued(true)
.matchMode(MatchModeEnum.AND.getCode())
.type(SelectorTypeEnum.FULL_FLOW.getCode()).build();
GrpcRuleHandle grpcRuleHandle = new GrpcRuleHandle();
if (Objects.nonNull(annotations)) {
grpcRuleHandle.setLoadBalance(annotations.getOrDefault(IngressConstants.LOADBALANCER_ANNOTATION_KEY, LoadBalanceEnum.RANDOM.getName()));
}
final RuleData ruleData = RuleData.builder()
.selectorId(IngressConstants.ID)
.pluginName(PluginEnum.GRPC.getName())
.name("grpc-rule")
.handle(GsonUtils.getInstance().toJson(grpcRuleHandle))
.matchMode(MatchModeEnum.AND.getCode())
.conditionDataList(Collections.singletonList(conditionData))
.loged(false)
.enabled(true)
.sort(Integer.MAX_VALUE).build();
MetaData metaData = new MetaData();
if (Objects.nonNull(annotations)) {
metaData.setAppName(annotations.getOrDefault(IngressConstants.PLUGIN_GRPC_APP_NAME, "grpc"));
metaData.setMethodName(annotations.getOrDefault(IngressConstants.PLUGIN_GRPC_METHOD_NAME, "hello"));
metaData.setPath(annotations.getOrDefault(IngressConstants.PLUGIN_GRPC_PATH, "/grpc/helloService/hello"));
metaData.setRpcType(annotations.getOrDefault(IngressConstants.PLUGIN_GRPC_RPC_TYPE, RpcTypeEnum.GRPC.getName()));
metaData.setServiceName(annotations.getOrDefault(IngressConstants.PLUGIN_GRPC_SERVICE_NAME, "hello.HelloService"));
metaData.setContextPath(annotations.getOrDefault(IngressConstants.PLUGIN_GRPC_CONTEXT_PATH, "/grpc"));
metaData.setRpcExt(annotations.getOrDefault(IngressConstants.PLUGIN_GRPC_RPC_EXPAND, "{\"timeout\":5000,\"methodType\":\"UNARY\"}"));
metaData.setServiceName(annotations.getOrDefault(IngressConstants.PLUGIN_GRPC_SERVICE_NAME, "hello.HelloService"));
metaData.setParameterTypes(annotations.getOrDefault(IngressConstants.PLUGIN_GRPC_PARAMETER_TYPE, "hello.HelloRequest,io.grpc.stub.StreamObserver"));
metaData.setEnabled(Boolean.parseBoolean(annotations.getOrDefault(IngressConstants.PLUGIN_GRPC_ENABLED, "true")));
}
return new IngressConfiguration(selectorData, Arrays.asList(ruleData), Arrays.asList(metaData));
}