我可以在同一个端口上运行多个 GRPC 服务吗

Aze*_*der 11 java grpc grpc-java

我正在工作gRPC,我想在同一个端口上运行多个服务

Server server = ServerBuilder.forPort(8080)
    .addService(new HelloServiceImpl())
    .addService(new ByeServiceImpl())
    .build();
Run Code Online (Sandbox Code Playgroud)

这是在同一端口上运行多个 GRPC 服务的正确方法吗?完整代码如下。

HelloWorld.proto

Server server = ServerBuilder.forPort(8080)
    .addService(new HelloServiceImpl())
    .addService(new ByeServiceImpl())
    .build();
Run Code Online (Sandbox Code Playgroud)

ByWorld.proto

syntax = "proto3";

option java_multiple_files = true;

package proto3.rpc;

message HelloRequest {
    string firstName = 1;
    string lastName = 2;
}

message HelloResponse {
    string greeting = 1;
}

service HelloService {
    rpc hello(HelloRequest) returns (HelloResponse);
}
Run Code Online (Sandbox Code Playgroud)

HelloServiceImpl.java

syntax = "proto3";

option java_multiple_files = true;

package proto3.rpc;

message ByeRequest {
    string firstName = 1;
    string lastName = 2;
}

message ByeResponse {
    string greeting = 1;
}

service ByeService {
    rpc bye(ByeRequest) returns (ByeResponse);
}
Run Code Online (Sandbox Code Playgroud)

ByeServiceImpl.java

public class HelloServiceImpl extends HelloServiceImplBase{

    @Override
    public void hello(
        HelloRequest request,
        StreamObserver<HelloResponse> responseObserver){

        String greeting = new StringBuilder()
            .append("Hello, ")
            .append(request.getFirstName())
            .append(" ")
            .append(request.getLastName())
            .toString();

        HelloResponse helloResponse = HelloResponse.newBuilder()
            .setGreeting(greeting)
            .build();

        responseObserver.onNext(helloResponse);
        responseObserver.onCompleted();  
    }

}
Run Code Online (Sandbox Code Playgroud)

GrpcServer.java

public class ByeServiceImpl extends ByeServiceImplBase{

    @Override
    public void bye(
        ByeRequest request,
        StreamObserver<ByeResponse> responseObserver){

        String greeting = new StringBuilder()
            .append("Bye, ")
            .append(request.getFirstName())
            .append(" ")
            .append(request.getLastName())
            .toString();

        ByeResponse byeResponse = ByeResponse.newBuilder()
            .setGreeting(greeting)
            .build();

        responseObserver.onNext(byeResponse);
        responseObserver.onCompleted();  
    }

}
Run Code Online (Sandbox Code Playgroud)

GrpcClient.java

public class GrpcServer {

    public static void main(String args[]) {
        Server server = ServerBuilder.forPort(8080)
    .addService(new HelloServiceImpl())
    .addService(new ByeServiceImpl())
    .build();

        try {
            server.start();
            server.awaitTermination();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}
Run Code Online (Sandbox Code Playgroud)

输出

Hello Service...
Hello Azeem Haider

Bye Service...
Bye Azeem Haider
Run Code Online (Sandbox Code Playgroud)

我知道两个服务文件看起来非常相似,但这只是例如我们如何在同一个IP:PORT上运行多个服务我正在使用这种方式是一种好方法还是有任何首选方式?