• grpc-java helloworld


    pom.xml

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.test</groupId>
        <artifactId>GrpcTest</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    
        <properties>
            <grpc-version>1.11.0</grpc-version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>io.grpc</groupId>
                <artifactId>grpc-core</artifactId>
                <version>${grpc-version}</version>
            </dependency>
            <dependency>
                <groupId>io.grpc</groupId>
                <artifactId>grpc-netty</artifactId>
                <version>${grpc-version}</version>
            </dependency>
            <dependency>
                <groupId>io.grpc</groupId>
                <artifactId>grpc-protobuf</artifactId>
                <version>${grpc-version}</version>
            </dependency>
            <dependency>
                <groupId>io.grpc</groupId>
                <artifactId>grpc-stub</artifactId>
                <version>${grpc-version}</version>
            </dependency>
        </dependencies>
    
        <build>
            <extensions>
                <extension>
                    <groupId>kr.motd.maven</groupId>
                    <artifactId>os-maven-plugin</artifactId>
                    <version>1.5.0.Final</version>
                </extension>
            </extensions>
    
            <plugins>
                <plugin>
                    <groupId>org.xolstice.maven.plugins</groupId>
                    <artifactId>protobuf-maven-plugin</artifactId>
                    <version>0.5.1</version>
                    <configuration>
                        <protocArtifact>com.google.protobuf:protoc:3.5.1-1:exe:${os.detected.classifier}</protocArtifact>
                        <pluginId>grpc-java</pluginId>
                        <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.11.0:exe:${os.detected.classifier}</pluginArtifact>
                        <protoSourceRoot>src/main/resources/proto</protoSourceRoot>
                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>compile</goal>
                                <goal>compile-custom</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.6.1</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    
    </project>

    greeter.proto

    syntax = "proto3";
    
    
    option java_multiple_files = true;
    option java_package = "com.grpc.test.rpc";
    option java_outer_classname = "GreeterProto";
    
    package greeter;
    
    // The greeting service definition.
    service Greeter {
      // Sends a greeting
      rpc SayHello (HelloRequest) returns (HelloReply) {}
      // Sends another greeting
      rpc SayHelloAgain (HelloRequest) returns (HelloReply) {}
    }
    
    // The request message containing the user's name.
    message HelloRequest {
      string name = 1;
    }
    
    // The response message containing the greetings
    message HelloReply {
      string message = 1;
    }

    client

    package com.grpc.test;
    
    import java.util.concurrent.TimeUnit;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    
    import com.grpc.test.rpc.GreeterGrpc;
    import com.grpc.test.rpc.HelloReply;
    import com.grpc.test.rpc.HelloRequest;
    
    import io.grpc.ManagedChannel;
    import io.grpc.ManagedChannelBuilder;
    import io.grpc.StatusRuntimeException;
    /**
     * A simple client that requests a greeting from the {@link HelloWorldServer}.
     */
    public class HelloWorldClient {
          private static final Logger logger = Logger.getLogger(HelloWorldClient.class.getName());
    
          private final ManagedChannel channel;
          private final GreeterGrpc.GreeterBlockingStub blockingStub;
    
          /** Construct client connecting to HelloWorld server at {@code host:port}. */
          @SuppressWarnings("deprecation")
        public HelloWorldClient(String host, int port) {
            this(ManagedChannelBuilder.forAddress(host, port)
                // Channels are secure by default (via SSL/TLS). For the example we disable TLS to avoid
                // needing certificates.
                .usePlaintext(true)
                .build());
          }
    
          /** Construct client for accessing RouteGuide server using the existing channel. */
          HelloWorldClient(ManagedChannel channel) {
            this.channel = channel;
            blockingStub = GreeterGrpc.newBlockingStub(channel);
          }
    
          public void shutdown() throws InterruptedException {
            channel.shutdown().awaitTermination(5, TimeUnit.SECONDS);
          }
    
          /** Say hello to server. */
          public void greet(String name) {
            logger.info("Will try to greet " + name + " ...");
            HelloRequest request = HelloRequest.newBuilder().setName(name).build();
            HelloReply response;
            try {
              response = blockingStub.sayHello(request);
            } catch (StatusRuntimeException e) {
              logger.log(Level.WARNING, "RPC failed: {0}", e.getStatus());
              return;
            }
            logger.info("Greeting: " + response.getMessage());
          }
    
          /**
           * Greet server. If provided, the first element of {@code args} is the name to use in the
           * greeting.
           */
          public static void main(String[] args) throws Exception {
            HelloWorldClient client = new HelloWorldClient("localhost", 50051);
            try {
              /* Access a service running on the local machine on port 50051 */
              String user = "world";
              if (args.length > 0) {
                user = args[0]; /* Use the arg as the name to greet if provided */
              }
              client.greet(user);
            } finally {
              client.shutdown();
            }
          }
    }

    server

    package com.grpc.test;
    
    import java.io.IOException;
    import java.util.logging.Logger;
    
    import com.grpc.test.rpc.GreeterGrpc;
    import com.grpc.test.rpc.HelloReply;
    import com.grpc.test.rpc.HelloRequest;
    
    import io.grpc.Server;
    import io.grpc.ServerBuilder;
    import io.grpc.stub.StreamObserver;
    
    public class HelloWorldServer {
          private static final Logger logger = Logger.getLogger(HelloWorldServer.class.getName());
    
          private Server server;
    
          private void start() throws IOException {
            /* The port on which the server should run */
            int port = 50051;
            server = ServerBuilder.forPort(port)
                .addService(new GreeterImpl())
                .build()
                .start();
            logger.info("Server started, listening on " + port);
            Runtime.getRuntime().addShutdownHook(new Thread() {
              @Override
              public void run() {
                // Use stderr here since the logger may have been reset by its JVM shutdown hook.
                System.err.println("*** shutting down gRPC server since JVM is shutting down");
                HelloWorldServer.this.stop();
                System.err.println("*** server shut down");
              }
            });
          }
    
          private void stop() {
            if (server != null) {
              server.shutdown();
            }
          }
    
          /**
           * Await termination on the main thread since the grpc library uses daemon threads.
           */
          private void blockUntilShutdown() throws InterruptedException {
            if (server != null) {
              server.awaitTermination();
            }
          }
    
          /**
           * Main launches the server from the command line.
           */
          public static void main(String[] args) throws IOException, InterruptedException {
            final HelloWorldServer server = new HelloWorldServer();
            server.start();
            server.blockUntilShutdown();
          }
    
          static class GreeterImpl extends GreeterGrpc.GreeterImplBase {
    
            @Override
            public void sayHello(HelloRequest req, StreamObserver<HelloReply> responseObserver) {
              HelloReply reply = HelloReply.newBuilder().setMessage("Hello " + req.getName()).build();
              responseObserver.onNext(reply);
              responseObserver.onCompleted();
            }
          }
    }
  • 相关阅读:
    洛谷提高组比赛day2
    清北合肥day2-day5
    高精度开根
    清北合肥day1
    愤怒的小鸟
    蓝书图论题
    替罪羊树&&非旋treap
    【bzoj4811】[Ynoi2017]由乃的OJ 树链剖分+线段树区间合并
    【bzoj3866】The Romantic Hero dp
    【bzoj3747】[POI2015]Kinoman
  • 原文地址:https://www.cnblogs.com/xxxuwentao/p/8919273.html
Copyright © 2020-2023  润新知