我可以在同一端口上运行多个 GRPC 服务吗 [已关闭]
我正在处理,并且想要在同一端口上运行多个服务gRPC
Server server = ServerBuilder.forPort(8080)
.addService(new HelloServiceImpl())
.addService(new ByeServiceImpl())
.build();
这是在同一端口上运行多个GRPC服务的正确方法吗?完整代码如下。
HelloWorld.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);
}
ByWorld.proto
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);
}
你好服务Impl.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();
}
}
再见服务.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();
}
}
GrpcServer.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();
}
}
}
咕噜咕噜.java
public class GrpcClient {
public static void main(String args[]){
ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 8080)
.usePlaintext()
.build();
HelloServiceGrpc.HelloServiceBlockingStub stub
= HelloServiceGrpc.newBlockingStub(channel);
HelloResponse helloResponse = stub.hello(HelloRequest.newBuilder()
.setFirstName("Azeem")
.setLastName("Haider")
.build()
);
System.out.println("Hello Service...");
System.out.println(helloResponse.getGreeting());
ByeServiceGrpc.ByeServiceBlockingStub stubBye
= ByeServiceGrpc.newBlockingStub(channel);
ByeResponse byeResponse = stubBye.bye(ByeRequest.newBuilder()
.setFirstName("Azeem")
.setLastName("Haider")
.build()
);
System.out.println("Bye Service...");
System.out.println(byeResponse.getGreeting());
channel.shutdown();
}
}
输出
Hello Service...
Hello Azeem Haider
Bye Service...
Bye Azeem Haider
我知道两个服务文件看起来非常相似,但这只是例如我们如何在同一个IP上运行多个服务:PORT我使用这种方式是一个好方法还是有什么首选方法?