使用 Pixiu 暴露 Dubbo-go 服务

Dubbo-go-pixiu 网关支持调用 GO/Java 的 Dubbo 集群。在 Dubbo-go 3.0 的场景下,我们可以通过 Pixiu 网关,在集群外以 HTTP 协议请求 pixiu 网关,在网关层进行协议转换,进一步调用集群内的Dubbo-go 服务。

img

用户调用 Dubbo-go 服务的 path 为http://$(app\_name)/$(service\_name)/$(method)

例如一个proto文件内有如下定义:

  1. package org.apache.dubbo.quickstart.samples;
  2. service UserProvider {
  3. rpc SayHello (HelloRequest) returns (User) {}
  4. }
  5. message HelloRequest {
  6. string name = 1;
  7. }

并在dubbo-go 服务启动时在dubbogo.yml 内配置应用名为my-dubbogo-app:

  1. dubbo:
  2. application:
  3. name: my-dubbogo-app

pixiu 网关即可解析 path 为 http://my-dubbogo-app/org.apache.dubbo.quickstart.samples.UserProvider/SayHello 的路由,并转发至对应服务。来自外部HTTP 请求的 body 为 json 序列化的请求参数,例如 {“name”:“test”}。

我们目前推荐使用 Nacos 作为注册中心。

用户可以在自己的集群里部署我们的demo,集群最好拥有暴露 lb 类型 service 的能力,从而可以在公网访问至集群内的服务,您也可以直接集群内进行请求。针对您的集群,执行:

  1. $ kubectl apply -f https://raw.githubusercontent.com/dubbogo/triple-pixiu-demo/master/deploy/pixiu-triple-demo.yml

会在 dubbogo-triple-nacos 命名空间下创建如下资源,包含三个 triple-server,一个pixiu网关,一个 nacos server。并通过 Servcie 将服务暴露至公网。

  1. namespace/dubbogo-triple-nacos created
  2. service/dubbo-go-nacos created
  3. deployment.apps/dubbogo-nacos-deployment created
  4. deployment.apps/pixiu created
  5. deployment.apps/server created
  6. service/pixiu created

获取 pixiu 公网 ip 并进行调用

  1. $ kubectl get svc -n dubbogo-triple-nacos
  2. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  3. dubbo-go-nacos ClusterIP 192.168.123.204 <none> 8848/TCP 32s
  4. pixiu LoadBalancer 192.168.156.175 30.XXX.XXX.XX 8881:30173/TCP 32s

通过curl 调用 demo 服务,并获得响应结果。

  1. $ curl -X POST -d '{"name":"laurence"}' http://30.XXX.XXX.XX:8881/dubbogoDemoServer/org.apache.dubbo.laurence.samples.UserProvider/SayHello
  2. {"name":"Hello laurence","id":"12345","age":21}

最后修改 December 16, 2022: Fix check (#1736) (97972c1)