dubbo_proxy: Adds a routing matcher for the Dubbo protocol. (#5571)
*Description*: Adds a routing matcher for the Dubbo protocol. #3998 *Risk Level*: low *Testing*: unit test *Docs Changes*: N/A *Release Notes*: N/A this is only part of the code for DubboProxy, the rest of the code hasn't been committed yet, complete implementation: https://github.com/gengleilei/envoy/tree/feature-dubbo-router-develop/source/extensions/filters/network/dubbo_proxy Signed-off-by: leilei.gll <leilei.gll@alibaba-inc.com> Mirrored from https://github.com/envoyproxy/envoy @ 57b19820c8cc3b3eb84bc0e372dc056aa29d472fpull/620/head
parent
40afd47af0
commit
77142859a6
3 changed files with 149 additions and 10 deletions
@ -1,27 +1,54 @@ |
||||
syntax = "proto3"; |
||||
|
||||
package envoy.extensions.filters.network.dubbo_proxy.v2alpha1; |
||||
option java_package = "io.envoyproxy.envoy.extensions.filters.network.dubbo_proxy.v2alpha1"; |
||||
package envoy.config.filter.network.dubbo_proxy.v2alpha1; |
||||
option java_package = "io.envoyproxy.envoy.config.filter.network.dubbo_proxy.v2alpha1"; |
||||
option go_package = "v2"; |
||||
|
||||
import "envoy/config/filter/network/dubbo_proxy/v2alpha1/route.proto"; |
||||
|
||||
import "google/protobuf/any.proto"; |
||||
|
||||
import "validate/validate.proto"; |
||||
import "gogoproto/gogo.proto"; |
||||
|
||||
// [#protodoc-title: Dubbo Proxy] |
||||
// Dubbo Proxy filter configuration. |
||||
|
||||
message DubboProxy { |
||||
// The human readable prefix to use when emitting statistics. |
||||
string stat_prefix = 1 [(validate.rules).string.min_bytes = 1]; |
||||
|
||||
// Configure the protocol used. |
||||
enum ProtocolType { |
||||
Dubbo = 0; // the default protocol. |
||||
} |
||||
ProtocolType protocol_type = 2 [(validate.rules).enum.defined_only = true]; |
||||
|
||||
// Configure the serialization protocol used. |
||||
enum SerializationType { |
||||
Hessian2 = 0; // the default serialization protocol. |
||||
} |
||||
SerializationType serialization_type = 3 [(validate.rules).enum.defined_only = true]; |
||||
|
||||
// The route table for the connection manager is static and is specified in this property. |
||||
repeated RouteConfiguration route_config = 4; |
||||
|
||||
// A list of individual Dubbo filters that make up the filter chain for requests made to the |
||||
// Dubbo proxy. Order matters as the filters are processed sequentially. For backwards |
||||
// compatibility, if no dubbo_filters are specified, a default Dubbo router filter |
||||
// (`envoy.filters.dubbo.router`) is used. |
||||
repeated DubboFilter dubbo_filters = 5; |
||||
} |
||||
|
||||
enum ProtocolType { |
||||
Dubbo = 0; // the default protocol. |
||||
} |
||||
|
||||
enum SerializationType { |
||||
Hessian2 = 0; // the default serialization protocol. |
||||
} |
||||
|
||||
// DubboFilter configures a Dubbo filter. |
||||
// [#comment:next free field: 3] |
||||
message DubboFilter { |
||||
// The name of the filter to instantiate. The name must match a supported |
||||
// filter. |
||||
string name = 1 [(validate.rules).string.min_bytes = 1]; |
||||
|
||||
// Filter specific configuration which depends on the filter being |
||||
// instantiated. See the supported filters for further documentation. |
||||
google.protobuf.Any config = 2; |
||||
} |
@ -0,0 +1,103 @@ |
||||
syntax = "proto3"; |
||||
|
||||
package envoy.config.filter.network.dubbo_proxy.v2alpha1; |
||||
option java_package = "io.envoyproxy.envoy.config.filter.network.dubbo_proxy.v2alpha1"; |
||||
option go_package = "v2"; |
||||
|
||||
import "envoy/api/v2/route/route.proto"; |
||||
import "envoy/type/matcher/string.proto"; |
||||
import "envoy/type/range.proto"; |
||||
|
||||
import "google/protobuf/wrappers.proto"; |
||||
|
||||
import "validate/validate.proto"; |
||||
import "gogoproto/gogo.proto"; |
||||
|
||||
// [#protodoc-title: Dubbo route configuration] |
||||
|
||||
message RouteConfiguration { |
||||
// The name of the route configuration. Reserved for future use in asynchronous route discovery. |
||||
string name = 1; |
||||
|
||||
// The interface name of the service. |
||||
string interface = 2; |
||||
|
||||
// Which group does the interface belong to. |
||||
string group = 3; |
||||
|
||||
// The version number of the interface. |
||||
string version = 4; |
||||
|
||||
// The list of routes that will be matched, in order, against incoming requests. The first route |
||||
// that matches will be used. |
||||
repeated Route routes = 5 [(gogoproto.nullable) = false]; |
||||
} |
||||
|
||||
message Route { |
||||
// Route matching prarameters. |
||||
RouteMatch match = 1 [(validate.rules).message.required = true, (gogoproto.nullable) = false]; |
||||
|
||||
// Route request to some upstream cluster. |
||||
RouteAction route = 2 [(validate.rules).message.required = true, (gogoproto.nullable) = false]; |
||||
} |
||||
|
||||
message MethodMatch { |
||||
// The name of the method. |
||||
envoy.type.matcher.StringMatcher name = 1; |
||||
|
||||
// The parameter matching type. |
||||
message ParameterMatchSpecifier { |
||||
oneof parameter_match_specifier { |
||||
// If specified, header match will be performed based on the value of the header. |
||||
string exact_match = 3; |
||||
|
||||
// If specified, header match will be performed based on range. |
||||
// The rule will match if the request header value is within this range. |
||||
// The entire request header value must represent an integer in base 10 notation: consisting |
||||
// of an optional plus or minus sign followed by a sequence of digits. The rule will not match |
||||
// if the header value does not represent an integer. Match will fail for empty values, |
||||
// floating point numbers or if only a subsequence of the header value is an integer. |
||||
// |
||||
// Examples: |
||||
// |
||||
// * For range [-10,0), route will match for header value -1, but not for 0, |
||||
// "somestring", 10.9, |
||||
// "-1somestring" |
||||
envoy.type.Int64Range range_match = 4; |
||||
} |
||||
} |
||||
|
||||
// Method parameter definition. |
||||
// The key is the parameter index, starting from 0. |
||||
// The value is the parameter matching type. |
||||
map<uint32, ParameterMatchSpecifier> params_match = 2; |
||||
} |
||||
|
||||
message RouteMatch { |
||||
// Method level routing matching. |
||||
MethodMatch method = 1; |
||||
|
||||
// Specifies a set of headers that the route should match on. The router will check the request’s |
||||
// headers against all the specified headers in the route config. A match will happen if all the |
||||
// headers in the route are present in the request with the same values (or based on presence if |
||||
// the value field is not in the config). |
||||
repeated envoy.api.v2.route.HeaderMatcher headers = 2; |
||||
} |
||||
|
||||
// [#comment:next free field: 2] |
||||
message RouteAction { |
||||
oneof cluster_specifier { |
||||
option (validate.required) = true; |
||||
|
||||
// Indicates the upstream cluster to which the request should be routed. |
||||
string cluster = 1; |
||||
|
||||
// Multiple upstream clusters can be specified for a given route. The |
||||
// request is routed to one of the upstream clusters based on weights |
||||
// assigned to each cluster. |
||||
// |
||||
// .. note:: |
||||
// Currently ClusterWeight only supports the name and weight fields. |
||||
envoy.api.v2.route.WeightedCluster weighted_clusters = 2; |
||||
} |
||||
} |
Loading…
Reference in new issue