Ich bin neu bei gRPC und habe dieses Problem: Ich habe eine .proto mit RPC-Service-Definition erstellt. Nach der Kompilierung bekomme ich generierte Quellen: Alle Nachrichten haben eine Klasse, die eine Schnittstelle implementiert. Ein Dienst selbst implementiert jedoch keine Schnittstelle - er wird einfach nicht generiert. Und das ist die Schnittstelle, die ich in meinem Server implementieren soll. Was mache ich falsch? Ich bin mir ziemlich sicher, dass die gRPC-Dokumentation nichts über dieses Problem aussagt.gRPC erzeugt keine Schnittstelle für einen Service, nur eine Serviceklasse
Mein .proto Service:
syntax = "proto3";
option java_multiple_files = true;
option java_package = "com.blah.my.rpc.api";
option java_outer_classname = "MyServiceProto";
option objc_class_prefix = "Pb";
package com.blah.my.rpc.api;
service MyService
{
rpc connect(PbEmptyMessage) returns (PbParameterGroup){}
rpc getParams(PbGenList) returns (PbParameterGroup){}
}
message PbEmptyMessage
{
}
message PbGenId
{
string paramName = 1;
string systemName = 2;
string sName = 3;
string sId = 4;
}
message PbParameterGroup
{
bytes sParameters = 2;
fixed64 time = 3;
}
Mein Plugin Definition in Maven:
<extensions>
<extension>
<groupId>kr.motd.maven</groupId>
<artifactId>os-maven-plugin</artifactId>
<version>1.4.0.Final</version>
</extension>
</extensions>
<plugins>
<plugin>
<groupId>org.xolstice.maven.plugins</groupId>
<artifactId>protobuf-maven-plugin</artifactId>
<version>0.5.0</version>
<configuration>
<protocArtifact>com.google.protobuf:protoc:3.0.0-beta-2:exe:${os.detected.classifier}
</protocArtifact>
<pluginId>grpc-java</pluginId>
<pluginArtifact>io.grpc:protoc-gen-grpc-java:0.14.0:exe:${os.detected.classifier}</pluginArtifact>
<protoSourceRoot>${basedir}/src/main/resources</protoSourceRoot>
<outputDirectory>${basedir}/target/generated-sources</outputDirectory>
</configuration>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>compile</goal>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Ich habe keine vollständige Antwort, aber beachten Sie, dass die "Stubs" (Service-Schnittstellen) von einem separaten Protoc-Plugin aus dem anderen Code generiert werden. Es sieht so aus, als würden Sie das Grpc-Plugin in Ihrer Maven-Datei benennen, aber Sie möchten vielleicht untersuchen, ob es aus irgendeinem Grund nicht aufgerufen wird. –