Skip to main content
Version: 2.9

nacos

Service discovery via Nacos#

This is experimental discovery module for Nacos.

The performance of this module needs to be improved:

  1. send the request parallelly.

Configuration for Nacos#

Add following configuration in conf/config.yaml :

discovery:  nacos:    host:      - "http://${username}:${password}@${host1}:${port1}"    prefix: "/nacos/v1/"    fetch_interval: 30    # default 30 sec    weight: 100           # default 100    timeout:      connect: 2000       # default 2000 ms      send: 2000          # default 2000 ms      read: 5000          # default 5000 ms

And you can config it in short by default value:

discovery:  nacos:    host:      - "http://192.168.33.1:8848"

Upstream setting#

Here is an example of routing a request with a URL of "/nacos/*" to a service which named "http://192.168.33.1:8848/nacos/v1/ns/instance/list?serviceName=APISIX-NACOS" and use nacos discovery client in the registry:

$ curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '{    "uri": "/nacos/*",    "upstream": {        "service_name": "APISIX-NACOS",        "type": "roundrobin",        "discovery_type": "nacos"    }}'

The formatted response as below:

{  "node": {    "key": "\/apisix\/routes\/1",    "value": {      "id": "1",      "create_time": 1615796097,      "status": 1,      "update_time": 1615799165,      "upstream": {        "hash_on": "vars",        "pass_host": "pass",        "scheme": "http",        "service_name": "APISIX-NACOS",        "type": "roundrobin",        "discovery_type": "nacos"      },      "priority": 0,      "uri": "\/nacos\/*"    }  },  "action": "set"}

discovery_args#

NameTypeRequirementDefaultValidDescription
namespace_idstringoptionalpublicThis parameter is used to specify the namespace of the corresponding service
group_namestringoptionalDEFAULT_GROUPThis parameter is used to specify the group of the corresponding service

Specify the namespace#

Example of routing a request with a URL of "/nacosWithNamespaceId/*" to a service which name, namespaceId "http://192.168.33.1:8848/nacos/v1/ns/instance/list?serviceName=APISIX-NACOS&namespaceId=test_ns" and use nacos discovery client in the registry:

$ curl http://127.0.0.1:9080/apisix/admin/routes/2 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '{    "uri": "/nacosWithNamespaceId/*",    "upstream": {        "service_name": "APISIX-NACOS",        "type": "roundrobin",        "discovery_type": "nacos",        "discovery_args": {          "namespace_id": "test_ns"        }    }}'

The formatted response as below:

{  "node": {    "key": "\/apisix\/routes\/2",    "value": {      "id": "2",      "create_time": 1615796097,      "status": 1,      "update_time": 1615799165,      "upstream": {        "hash_on": "vars",        "pass_host": "pass",        "scheme": "http",        "service_name": "APISIX-NACOS",        "type": "roundrobin",        "discovery_type": "nacos",        "discovery_args": {          "namespace_id": "test_ns"        }      },      "priority": 0,      "uri": "\/nacosWithNamespaceId\/*"    }  },  "action": "set"}

Specify the group#

Example of routing a request with a URL of "/nacosWithGroupName/*" to a service which name, groupName "http://192.168.33.1:8848/nacos/v1/ns/instance/list?serviceName=APISIX-NACOS&groupName=test_group" and use nacos discovery client in the registry:

$ curl http://127.0.0.1:9080/apisix/admin/routes/3 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '{    "uri": "/nacosWithGroupName/*",    "upstream": {        "service_name": "APISIX-NACOS",        "type": "roundrobin",        "discovery_type": "nacos",        "discovery_args": {          "group_name": "test_group"        }    }}'

The formatted response as below:

{  "node": {    "key": "\/apisix\/routes\/3",    "value": {      "id": "3",      "create_time": 1615796097,      "status": 1,      "update_time": 1615799165,      "upstream": {        "hash_on": "vars",        "pass_host": "pass",        "scheme": "http",        "service_name": "APISIX-NACOS",        "type": "roundrobin",        "discovery_type": "nacos",        "discovery_args": {          "group_name": "test_group"        }      },      "priority": 0,      "uri": "\/nacosWithGroupName\/*"    }  },  "action": "set"}

Specify the namespace and group#

Example of routing a request with a URL of "/nacosWithNamespaceIdAndGroupName/*" to a service which name, namespaceId, groupName "http://192.168.33.1:8848/nacos/v1/ns/instance/list?serviceName=APISIX-NACOS&namespaceId=test_ns&groupName=test_group" and use nacos discovery client in the registry:

$ curl http://127.0.0.1:9080/apisix/admin/routes/4 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '{    "uri": "/nacosWithNamespaceIdAndGroupName/*",    "upstream": {        "service_name": "APISIX-NACOS",        "type": "roundrobin",        "discovery_type": "nacos",        "discovery_args": {          "namespace_id": "test_ns",          "group_name": "test_group"        }    }}'

The formatted response as below:

{  "node": {    "key": "\/apisix\/routes\/4",    "value": {      "id": "4",      "create_time": 1615796097,      "status": 1,      "update_time": 1615799165,      "upstream": {        "hash_on": "vars",        "pass_host": "pass",        "scheme": "http",        "service_name": "APISIX-NACOS",        "type": "roundrobin",        "discovery_type": "nacos",        "discovery_args": {          "namespace_id": "test_ns",          "group_name": "test_group"        }      },      "priority": 0,      "uri": "\/nacosWithNamespaceIdAndGroupName\/*"    }  },  "action": "set"}