Baoyuantop commented on code in PR #12448:
URL: https://github.com/apache/apisix/pull/12448#discussion_r2321091455


##########
apisix/schema_def.lua:
##########
@@ -488,6 +488,18 @@ local upstream_schema = {
                     description = "group name",
                     type = "string",
                 },
+                metadata_match = {

Review Comment:
   It is recommended to unify it as metadata.



##########
docs/en/latest/discovery/consul.md:
##########
@@ -232,6 +232,61 @@ $ curl http://127.0.0.1:9180/apisix/admin/stream_routes/1 
-H "X-API-KEY: $admin_
 }'
 ```
 
+### discovery_args
+
+| Name           | Type   | Requirement | Default | Valid | Description        
                                          |
+|----------------| ------ | ----------- | ------- | ----- | 
------------------------------------------------------------ |
+| metadata_match | object | optional    | {}      |       | Filter service 
instances by metadata using containment matching |
+
+#### Metadata filtering
+
+APISIX supports filtering service instances based on metadata. When a route is 
configured with metadata conditions, only service instances whose metadata 
matched with roles specified in the route's `metadata_match` configuration will 
be selected.
+
+Example: If a service instance has metadata `{lane: "a", env: "prod", version: 
"1.0"}`, it will match routes configured with metadata `{lane: ["a"]}` or 
`{lane: ["a", "b"], env: "prod"}`, but not routes configured with `{lane: 
["c"]}` or `{lane: "a", region: "us"}`.
+
+Example of routing a request with metadata filtering:
+
+```shell
+$ curl http://127.0.0.1:9180/apisix/admin/routes/5 -H "X-API-KEY: $admin_key" 
-X PUT -i -d '
+{
+    "uri": "/consulWithMetadata/*",
+    "upstream": {
+        "service_name": "APISIX-CONSUL",
+        "type": "roundrobin",
+        "discovery_type": "consul",
+        "discovery_args": {
+          "metadata_match": {
+            "version": ["v1", "v2"]

Review Comment:
   I have a question here, is it necessary to set the value to an array? I 
checked the service meta format of consul 
https://developer.hashicorp.com/consul/docs/reference/service#meta, and I think 
setting the value to a string should be sufficient to reduce complexity.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to