Entwickeln Sie gRPC unter Windows + Java 7 + Maven 2

Windows + Java 7 + Maven 2-Serie

Es gibt Zeiten, in denen das Neueste nicht genug auf der Welt ist. Zum Beispiel IE, IE, IE. Deshalb hoffe ich, dass es eine Referenz für diejenigen ist, die hart arbeiten müssen, um sich in einer alten Umgebung zu entwickeln. Andere haben die Erklärung von gRPC selbst ausführlich geschrieben. Bitte suchen Sie danach.

Etwa diese Umgebung. Verschiedene alte.

Überprüfen Sie zunächst mit der Methode von Imadoki

Unter Bezugnahme auf das Folgende. https://grpc.io/docs/tutorials/basic/java/ https://github.com/grpc/grpc-java/blob/master/examples/README.md

Wenn Sie es sich nicht leisten können, überspringen Sie bitte hier.

Lassen Sie uns mit Docker wie gewohnt schnell eine Umgebung erstellen.

$ docker run --rm -it --name grpc-java -p 50051:50051 ubuntu
root@e7b3b2c13c0b:/# apt-get update
root@e7b3b2c13c0b:/# apt-get install -y git openjdk-8-jdk maven
root@e7b3b2c13c0b:/# git clone -b v1.22.1 https://github.com/grpc/grpc-java
root@e7b3b2c13c0b:/# cd grpc-java/examples
root@e7b3b2c13c0b:/grpc-java/examples# ./gradlew installDist

Übrigens wird tools.jar verwendet, daher können Sie jre nicht verwenden. Wenn Sie dies mit jre tun, tritt der folgende Fehler auf.

> Task :compileJava FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':compileJava'.
> Could not find tools.jar. Please check that /usr/lib/jvm/java-8-openjdk-amd64 contains a valid JDK installation.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 43s

Zu diesem Zeitpunkt ist die Umgebung bereit. Ein Beispiel für HelloWorld finden Sie unten.

/grpc-java/examples/src/main/proto/helloworld.proto /grpc-java/examples/src/main/java/io/grpc/examples/helloworld/HelloWorldServer.java /grpc-java/examples/src/main/java/io/grpc/examples/helloworld/HelloWorldClient.java

Lassen Sie es uns unter / grpc-java / examples erstellen und ausführen.

root@e7b3b2c13c0b:~# cd /grpc-java/examples
root@e7b3b2c13c0b:/grpc-java/examples# mvn clean compile
root@e7b3b2c13c0b:/grpc-java/examples# mvn exec:java -Dexec.mainClass=io.grpc.examples.helloworld.HelloWorldServer &
[1] 5817
root@e7b3b2c13c0b:/grpc-java/examples# 
root@e7b3b2c13c0b:/grpc-java/examples# mvn exec:java -Dexec.mainClass=io.grpc.examples.helloworld.HelloWorldClient

Wenn Sie "Gruß: Hallo Welt" sehen, sind Sie fertig. Diesmal werden Server und Client auf demselben Terminal ausgeführt. Wenn Sie den Server herunterfahren möchten, führen Sie die folgenden Schritte aus. (fg-> Strg + C)

root@e7b3b2c13c0b:/grpc-java/examples# fg
mvn exec:java -Dexec.mainClass=io.grpc.examples.helloworld.HelloWorldServer
^C*** shutting down gRPC server since JVM is shutting down
*** server shut down
root@e7b3b2c13c0b:/grpc-java/examples#

Wenn Sie die Protodatei geändert haben, führen Sie ./gradlew install Dist aus, um den Java-Code zu generieren. Wenn Sie die Java-Ausführungsoptionen ändern möchten, können Sie "MAVEN_OPTS" festlegen.

MAVEN_OPTS="-server -Xmx1024m -Xms1024m -Xloggc:/grpc-java/examples/GC.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xverify:none -Djava.security.egd=file:/dev/./urandom -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+CMSClassUnloadingEnabled -XX:+DisableExplicitGC -XX:+PrintTenuringDistribution -XX:-Inline"
export MAVEN_OPTS

Für Windows

Nun, es ist endlich das Hauptthema. Es ist ein gebundenes Spiel, das die Verwendung von Docker und Gradle unter Windows verbietet. Pure gRPC ist Java 7 oder höher, aber das Beispiel verwendet Gradle und Maven 3 oder höher ist erforderlich (um das Plug-In zu verwenden).

Lassen Sie uns zunächst ein Maven-Projekt erstellen. Die diesmal erforderlichen Abhängigkeiten sind wie folgt. (Log ist Ihre Wahl)

pom.xml


	<dependencies>
		<dependency>
			<groupId>io.grpc</groupId>
			<artifactId>grpc-all</artifactId>
			<version>1.22.1</version>
		</dependency>
		<dependency>
			<groupId>com.google.protobuf</groupId>
			<artifactId>protobuf-java</artifactId>
			<version>3.9.0</version>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.12</version>
		</dependency>
		<dependency>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
			<version>1.1.1</version>
		</dependency>
	</dependencies>

Erstellen Sie einen Proto-Ordner direkt unter dem Projekt und erstellen Sie eine Proto-Datei.

grpc.proto


syntax = "proto3";

option java_multiple_files = true;
option java_package = "org.mygrpc.helloworld";
option java_outer_classname = "GrpcProto";

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

Generieren Sie eine Java-Quelle aus einer Protodatei. Laden Sie die Datei für Windows unter [protobuf] herunter (https://github.com/protocolbuffers/protobuf/). https://github.com/protocolbuffers/protobuf/releases/download/v3.9.0/protoc-3.9.0-win64.zip

Entpacken Sie es und platzieren Sie "protoc.exe" unter dem Ordner "bin" an einem Ort, der sich in Ihrem Pfad befindet. Sie können es irgendwo neu platzieren und durch den Pass führen. Wenn Sie in Zukunft mit dem vollständigen Pfad ausgeführt werden, müssen Sie den Pfad nicht separat übergeben.

Führen Sie an der Eingabeaufforderung Folgendes in dem Ordner aus, der die zuvor erstellte grpc.proto enthält.

protoc --java_out=..\src\main\java grpc.proto

Die Quelle wurde unter "org.mygrpc.helloworld" generiert.

.
│  pom.xml
│
├─proto
│      grpc.proto
│
└─src
   ├─main
   │  ├─java
   │  │  └─org
   │  │      └─mygrpc
   │  │          └─helloworld
   │  │                  GrpcProto.java
   │  │                  HelloReply.java
   │  │                  HelloReplyOrBuilder.java
   │  │                  HelloRequest.java
   │  │                  HelloRequestOrBuilder.java
   │  │
   │  └─resources
   │          log4j.dtd
   │          log4j.xml
   │
   └─test
       ├─java
       └─resources

Eigentlich reicht das nicht aus. Laden Sie das Tool herunter, um ein weiteres zu generieren. https://search.maven.org/search?q=g:io.grpc%20a:protoc-gen-grpc-java

Platzieren Sie die heruntergeladene Exe in einem beliebigen Ordner und führen Sie die folgenden Schritte aus (ändern Sie den Pfad zu dem Ordner, in dem sich die obige Exe befindet).

protoc --plugin=protoc-gen-grpc-java=C:\protoc\protoc-gen-grpc-java-1.22.1-windows-x86_64.exe --grpc-java_out=..\src\main\java grpc.proto

Ich denke, Sie haben "GreeterGrpc.java" erstellt.

Erstellen Sie die Server- und Clientprozesse anhand des Beispiels.

HelloWorldServer.java


package org.mygrpc.helloworld;

import io.grpc.Server;
import io.grpc.ServerBuilder;
import io.grpc.stub.StreamObserver;

import java.io.IOException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class HelloWorldServer {
    /** Log. */
    protected static Log log = LogFactory.getLog(HelloWorldServer.class);

    private Server server;

    private void start() throws IOException {
      int port = 50051;
      server = ServerBuilder.forPort(port)
          .addService(new GreeterImpl())
          .build()
          .start();
      log.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();
      }
    }
}

HelloWorldClient.java


package org.mygrpc.helloworld;

import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;
import io.grpc.StatusRuntimeException;

import java.util.concurrent.TimeUnit;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class HelloWorldClient {
    /** Log. */
    protected static Log log = LogFactory.getLog(HelloWorldClient.class);

    public static void main(String[] args) throws Exception {
        ManagedChannel channel = ManagedChannelBuilder
                .forAddress("localhost", 50051).usePlaintext().build();
        GreeterGrpc.GreeterBlockingStub blockingStub = GreeterGrpc
                .newBlockingStub(channel);

        try {
            HelloRequest request = HelloRequest.newBuilder().setName("World").build();
            try {
                HelloReply resp = blockingStub.sayHello(request);
                log.info(resp.getMessage());
            } catch (StatusRuntimeException e) {
                log.warn("RPC failed: " + e.getStatus());
                return;
            }
        } finally {
            channel.shutdown().awaitTermination(5, TimeUnit.SECONDS);
        }
    }
}

Wenn Sie den Server bzw. den Client ausführen und "Hello World" ausgeben, ist dies in Ordnung. Jetzt können Sie sich endlich entwickeln.

Übrigens scheint es als Plug-In zum Bearbeiten von Protodateien Folgendes zu geben, aber ich habe aufgegeben, weil Version 2.3.0 oder höher Eclipse 4.6 Neon oder höher erfordert. https://github.com/google/protobuf-dt

Recommended Posts

Entwickeln Sie gRPC unter Windows + Java 7 + Maven 2
Verwenden von JupyterLab + Java mit WSL unter Windows 10
Speichermessung von Java-Apps unter Windows
Erstellen von Java-Webanwendungen unter Windows Server 2016
Java, Maven Memo
Versuchen Sie die Kommunikation mit gRPC auf einem Android + Java-Server
[Lösung] Java kann unter Windows 10 + ATOK 2017 nicht installiert werden
Installieren Sie Corretto 8 unter Windows
Maven auf CentOS 7 Tutorial
Installieren Sie Java auf dem Mac
Führen Sie Maven unter Java 8 aus, während Sie unter Java 6 kompilieren und unter Java 11 testen
Führen Sie PostgreSQL unter Java aus
Installieren Sie Java und Maven mit Brew auf einem neuen Mac
Verwenden Sie Java Web Start in einer OpenJDK-Umgebung unter Windows
Installieren Sie Docker unter Windows 10 PRO
Installieren Sie OpenJDK7 (JAVA) unter Ubuntu 14.04
Downgrade von Java unter openSUSE Linux
Reflexion über die Manipulation von Java-Strings
Führen Sie openvpn unter Docker aus (Windows)
Probieren Sie Docker unter Windows 10 Home aus
Oracle Java 8 unter Docker Ubuntu
Erstellen Sie OpenJDK manuell unter Windows
Ändern Sie die Java-Codierung in Windows
Installieren Sie Java unter WSL Ubuntu 18.04
[Windows] Java-Code ist verstümmelt
Ubuntu unter Windows Build-Geschwindigkeit
Fügen Sie Oracle Java 8 in CircleCI 2 ein
Ändern Sie die Java-Version unter CentOS
Installieren Sie Java 1.8.0 unter Amazon Linux2
So bedienen Sie automatisch einen in Java unter Windows erstellten Bildschirm