Code: Select all
plugins {
id 'java'
id 'org.springframework.boot' version '3.4.4'
id 'io.spring.dependency-management' version '1.1.7'
id 'com.google.protobuf' version '0.9.4'
}
repositories {
mavenCentral()
}
ext {
set('springGrpcVersion', "0.4.0")
}
dependencies {
implementation 'io.grpc:grpc-services'
implementation 'org.springframework.grpc:spring-grpc-spring-boot-starter'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.grpc:spring-grpc-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
implementation 'io.grpc:grpc-netty-shaded'
modules {
module("io.grpc:grpc-netty") {
replacedBy("io.grpc:grpc-netty-shaded", "Use Netty shaded instead of regular Netty")
}
}
}
dependencyManagement {
imports {
mavenBom "org.springframework.grpc:spring-grpc-dependencies:${springGrpcVersion}"
}
}
protobuf {
protoc {
artifact = 'com.google.protobuf:protoc'
}
plugins {
grpc {
artifact = 'io.grpc:protoc-gen-grpc-java'
}
}
generateProtoTasks {
all()*.plugins {
grpc {
option 'jakarta_omit'
option '@generated=omit'
}
}
}
}
// ...
Code: Select all
syntax = "proto3";
option java_package = "com.asr.example.grpc.demo.model";
option java_multiple_files = true;
message HelloWorldRequest {
optional string name = 1;
}
message HelloWorldResponse {
string greeting = 1;
}
service HelloWorldService {
rpc sayHello(stream HelloWorldRequest) returns (stream HelloWorldResponse);
}
Code: Select all
import com.asr.example.grpc.demo.model.HelloWorldRequest;
import com.asr.example.grpc.demo.model.HelloWorldResponse;
import com.asr.example.grpc.demo.model.HelloWorldServiceGrpc;
import io.grpc.stub.StreamObserver;
import org.springframework.grpc.server.service.GrpcService;
import org.springframework.util.StringUtils;
import java.text.MessageFormat;
@GrpcService
public class HelloWorldController extends HelloWorldServiceGrpc.HelloWorldServiceImplBase {
@Override
public StreamObserver sayHello(StreamObserver responseObserver) {
return super.sayHello(responseObserver);
}
/* Expected:
public StreamObserver sayHello(HelloWorldRequest request, StreamObserver responseObserver) {
// Further Implementation
}
*/
// Original without streaming
// @Override
public void sayHello(
HelloWorldRequest request,
StreamObserver responseObserver) {
responseObserver
.onNext(HelloWorldResponse.newBuilder()
.setGreeting(MessageFormat.format(
"Hello {0}!!!",
StringUtils.hasText(request.getName()) ? request.getName() : "Arvind")
)
.build()
);
responseObserver
.onCompleted();
}
}
Bootstrade -Code aus Spring Initializr. /> Stream < /code> Schlüsselwort als Präfix in der Helloworld -Anforderung in Protobuf -Spezifikation. Funktioniert nicht?>