单 Server 多 Service

Kitex 支持在一个 Server 上注册多个 Service。

注:当前这个功能仅支持 gRPC 传输协议。

使用

gRPC service 定义

例如,假设您有两个 proto 文件(如下所示),每个包含一个 service。 通过执行 kitex 命令,可以自动生成对应的代码。

// File1:servicea.proto
syntax = "proto3";

option go_package = "myservice";

package myservice;

service ServiceA {
  rpc EchoA (stream RequestA) returns (stream ReplyA) {}
}

message RequestA {
  ...
}

message ReplyA {
  ...
}


// File2:serviceb.proto
syntax = "proto3";

option go_package = "myservice";

package myservice;

service ServiceB {
  rpc EchoB (stream RequestB) returns (stream ReplyB) {}
}

message RequestB {
  ...
}

message ReplyB {
  ...
}

如何在一个 Server 上注册多个 Service

在一个 server 上注册多个 service 是一个简单的过程。

首先,创建一个 server。然后,通过调用该 server 上的 RegisterService 函数,就可以注册 service 了。

package main

import (
   "github.com/cloudwego/kitex/pkg/server"

   servicea "your_servicea_kitex_gen_path"
   serviceb "your_serviceb_kitex_gen_path"
)

func main() {
   // create a server by calling server.NewServer
   svr := server.NewServer(your_server_option)
   // register multi-service on a server
   err := svr.RegisterService(servicea.NewServiceInfo(), new(ServiceAImpl))
   err := svr.RegisterService(serviceb.NewServiceInfo(), new(ServiceBImpl))

   err := svr.Run()

   if err != nil {
      logs.Error("%s", err.Error())
   }
   logs.Stop()
}

最后修改 January 18, 2024 : Upload volo blog (#936) (1fc8abb)