gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 03:45:51 35 4
gpt4 key购买 nike

<分区>

我正在处理 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);
}

HelloServiceImpl.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();
}

}

ByeServiceImpl.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();
}

}

}

GrpcClient.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

我知道这两个 Services 文件看起来非常相似,但这只是我们如何在同一个 IP:PORT 上运行多个服务的例子,我正在使用这种方式是吗有什么好的方法或者有更好的方法吗?

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com