proto
syntax = "proto3";
package mypackage;
service MyService {
rpc MyMethod (MyRequest) returns (MyResponse) {}
}
message MyRequest {
string name = 1;
}
message MyResponse {
string message = 1;
}
protoc -I=$SRC_DIR --java_out=$DST_DIR $SRC_DIR/MyService.proto
package mypackage;
import io.grpc.stub.StreamObserver;
public class MyServiceImpl extends MyServiceGrpc.MyServiceImplBase {
@Override
public void myMethod(MyRequest request, StreamObserver<MyResponse> responseObserver) {
String name = request.getName();
String message = "Hello, " + name + "!";
MyResponse response = MyResponse.newBuilder().setMessage(message).build();
responseObserver.onNext(response);
responseObserver.onCompleted();
}
}
package mypackage;
import io.grpc.Server;
import io.grpc.ServerBuilder;
import java.io.IOException;
public class Server {
public static void main(String[] args) throws IOException, InterruptedException {
Server server = ServerBuilder.forPort(50051)
.addService(new MyServiceImpl())
.build();
server.start();
System.out.println("Server started on port 50051");
server.awaitTermination();
}
}
package mypackage;
import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;
public class Client {
public static void main(String[] args) {
ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 50051)
.usePlaintext()
.build();
MyServiceGrpc.MyServiceBlockingStub stub = MyServiceGrpc.newBlockingStub(channel);
MyRequest request = MyRequest.newBuilder().setName("John").build();
MyResponse response = stub.myMethod(request);
System.out.println("Response: " + response.getMessage());
channel.shutdown();
}
}
javac ./**/*.java
java mypackage.Server
java mypackage.Client