Dubbo 最初是 Java 开发的一套 RPC 框架,随着社区的发展。当前 dubbo 也渐渐成为一套跨语言的解决方案。除了 Java 以外,还有相应的 Go 实现。有规律的版本发布节奏,社区较为活跃。
接入 service mesh 的应用,其服务发现应该由相应的 mesh 模块接管。一般由控制面将相应的服务发现配置进行订阅和下发。但这里存在几个问题:
我们这里提出的方案希望能够解决这些问题。
在配置文件中,我们配置了两个 listener:
"listeners": [
{
"name": "serverListener",
"address": "127.0.0.1:2046",
"bind_port": true,
"log_path": "stdout",
"filter_chains": [
{
"tls_context": {},
"filters": [
{
"type": "proxy",
"config": {
"downstream_protocol": "X",
"upstream_protocol": "X",
"router_config_name": "server_router",
"extend_config": {
"sub_protocol": "dubbo"
}
}
}
]
}
]
},
{
"name": "clientListener",
"address": "0.0.0.0:2045",
"bind_port": true,
"log_path": "stdout",
"filter_chains": [
{
"tls_context": {},
"filters": [
{
"type": "proxy",
"config": {
"downstream_protocol": "X",
"upstream_protocol": "X",
"router_config_name": "dubbo",
"extend_config": {
"sub_protocol": "dubbo"
}
}
}
]
}
]
}
]
接入 MOSN dubbo 时,需要进行下列准备工作。
第一步,build MOSN 的 dubbo 特殊版本。
在 MOSN 的 cmd/mosn/main 中,执行:
go build -tags dubbo
第二步,针对接入的服务,需要简单修改 sdk 中的 pub、sub 环节代码:
第三步,应用退出时,需要将所有 pub、sub 的服务执行反向操作,即 unpub、unsub。
在本文中使用 httpie 来发送 http 请求。使用 dubbo-go 中的样例程序作为我们的服务的 client 和 server。
接下来我们使用 httpie 来模拟各种情况下的 pub、sub 流程。
Service 是正常的 dubbo service,所以会自动注册到 zk 中去,不需要我们帮它 pub,这里只要 sub 就可以了,所以执行流程为:
第一步,build 带 dubbo tag 的 MOSN。
第二步,mosn start。
第三步,start server。
第四步,subscribe service。
http --json post localhost:22222/sub registry:='{"type":"zookeeper", "addr" : "127.0.0.1:2181"}' service:='{"interface" : "com.ikurento.user.UserProvider", "methods" :["GetUser"], "group" : "", "version" : ""}' --verbose
第五步,start client。
在 client 中正确看到返回结果的话,说明请求成功了。
直连的服务不会主动对自身进行发布,直连的 client 不会主动进行订阅。因此此例子中,pub 和 sub 都是由我们来辅助进行的。
第一步,build 带 dubbo tag 的 MOSN
第二步,mosn start
第三步,start server
第四步,subscribe service
http --json post localhost:22222/sub registry:='{"type":"zookeeper", "addr" : "127.0.0.1:2181"}' service:='{"interface" : "com.ikurento.user.UserProvider", "methods" :["GetUser"], "group" : "", "version" : ""}' --verbose
第五步,publish service
http --json post localhost:22222/pub registry:='{"type":"zookeeper", "addr" : "127.0.0.1:2181"}' service:='{"interface" : "com.ikurento.user.UserProvider", "methods" :["GetUser"], "group" : "", "version" : ""}' --verbose
第六步,start client
此时应该能看到 client 侧的响应。
Client 是正常 client,因此 client 会自己去 subscribe。我们只要正常地把服务 pub 出去即可:
第一步,build 带 dubbo tag 的 MOSN
第二步,mosn start
第三步,start server
第四步,publish service
http --json post localhost:22222/sub registry:='{"type":"zookeeper", "addr" : "127.0.0.1:2181"}' service:='{"interface" : "com.ikurento.user.UserProvider", "methods" :["GetUser"], "group" : "", "version" : ""}' --verbose
第五步,start client
此时应该能看到 client 侧的响应。
暂时还不支持 Dubbo 的路由,未来会进行支持。
原文地址:https://mosn.io/zh/docs/dev/dubbo-integrate/