我最近找到一个国产的开源网关Apinto,纯go语言编写,并且支持多种协议转换。
我给你简单展示下http协议转dubbo协议,Apinto的安装步骤我就不展示了,只看效果。
Apinto地址如下:基于golang开发的网关。具有各种插件,可以自行扩展,即插即用。此外,它可以快速帮助企业管理API服务,提高API服务的稳定性和安全性。
准备好一个java的dubbo服务端
package cn.demo.model;
public class User {
String name;
int id;
Integer age;
}
package cn.demo.api.UserService;
import cn.demo.model.User;
import java.util.List;
import java.util.Map;
public interface UserService {
User sayHello(User user);//输入什么输出什么
}
接下来准备配置Apinto
- 创建一个全局的http转dubbo插件
curl -X POST 'http://127.0.0.1:9400/api/setting/plugin' \
-H 'Content-Type:application/json' \
-d '{
"plugins":[{
"id":"eolinker.com:apinto:http_to_dubbo2",
"name":"http-to-dubbo",
"status":"enable"
}]
}'
- 创建一个上游服务,绑定dubbo服务
curl -X POST \
'http://127.0.0.1:9400/api/service' \
-H 'Content-Type:application/json' \
-d '{
"name": "dubbo_service",
"driver": "http",
"description": "",
"timeout": 3000,
"retry": 3,
"scheme": "HTTP",
"nodes": ["127.0.0.1:20880"],
"balance": "round-robin"
}'
- 创建一个http路由,绑定上游服务和http转dubbo协议的插件,并配置相关插件信息
curl -X POST \
'http://127.0.0.1:9400/api/router' \
-H 'Content-Type:application/json' \
-d '{
"name": "http_router",
"driver": "http",
"description": "",
"location": "/sayHello",
"rules": [],
"plugins":{
"http-to-dubbo":{
"disable":false,
"config":{
"method":"sayHello",
"service":"com.demo.api.UserService",
"params":[
{
"class_name":"com.demo.model.User"
}
]
}
}
},
"service": "dubbo_service@service",
"template":""
}'
# config中的method为方法名,service为服务名 params为传递给dubbo服务的字段名
- 发起http请求测试
curl -X POST \
'http://127.0.0.1:8099/sayHello' \
-H 'Content-Type:application/json' \
-d '{
"name": "xxx",
"id":10
}'
执行后结果如下,表示转发成功啦