Skip to main content
Version: Next

dubbo-proxy

Summary#

Name#

dubbo-proxy plugin allows you proxy HTTP request to dubbo.

Requirement#

If you are using OpenResty, you need to build it with dubbo support, see how to build

To make http2dubbo work in APISIX, we enhance the dubbo module based on Tengine's mod_dubbo. The modifications are contributed back to Tengine, but they are not included in the latest release version (Tengine-2.3.2) yet. So Tengine itself is unsupported.

Runtime Attributes#

NameTypeRequirementDefaultValidDescription
service_namestringrequireddubbo provider service name
service_versionstringrequireddubbo provider service version
methodstringoptionalthe path of uridubbo provider service method

Static Attributes#

NameTypeRequirementDefaultValidDescription
upstream_multiplex_countnumberrequired32>= 1the maximum number of multiplex requests in an upstream connection

How To Enable#

First of all, enable the dubbo-proxy plugin in the config.yaml:

# Add this in config.yamlplugins:  - ... # plugin you need  - dubbo-proxy

Then reload APISIX.

Here's an example, enable the dubbo-proxy plugin on the specified route:

curl http://127.0.0.1:9080/apisix/admin/upstream/1  -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '{    "nodes": {        "127.0.0.1:20880": 1    },    "type": "roundrobin"}'
curl http://127.0.0.1:9080/apisix/admin/routes/1  -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '{    "uris": [        "/hello"    ],    "plugins": {        "dubbo-proxy": {            "service_name": "org.apache.dubbo.sample.tengine.DemoService",            "service_version": "0.0.0",            "method": "tengineDubbo"        }    },    "upstream_id": 1}'

Test Plugin#

You can follow the Quick Start example in Tengine and use the configuration above to test it. They should provide the same result.

The returned data from upstream dubbo service must be a Map<String, String>.

If the returned data is

{    "status": "200",    "header1": "value1",    "header2": "valu2",    "body": "blahblah"}

the converted HTTP response will be

HTTP/1.1 200 OK # "status" will be the status code...header1: value1header2: value2...
blahblah # "body" will be the body

Disable Plugin#

When you want to disable the dubbo-proxy plugin on a route/service, it is very simple, you can delete the corresponding json configuration in the plugin configuration, no need to restart the service, it will take effect immediately:

$ curl http://127.0.0.1:9080/apisix/admin/routes/1  -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '{    "methods": ["GET"],    "uris": [        "/hello"    ],    "plugins": {    },    "upstream_id": 1    }}'

The dubbo-proxy plugin has been disabled now. It works for other plugins.

If you want to disable dubbo-proxy plugin totally, you need to comment out in the config.yaml:

plugins:  - ... # plugin you need  #- dubbo-proxy

And then reload APISIX.