GH-750 Add support for pluggable protobufs

This initial support adds plugin extension to support CloudEvent proto as well as the example
Additional plugins could be provided in the same ay as CloudEvent plugin extension

Resolves #750
This commit is contained in:
Oleg Zhurakousky
2021-10-11 14:03:24 +02:00
parent d4f3d9f222
commit 41043479f5
41 changed files with 2659 additions and 312 deletions

View File

@@ -0,0 +1,65 @@
package com.example.grpc.demo;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.function.grpc.MessagingServiceGrpc;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.messaging.Message;
import org.springframework.messaging.support.MessageBuilder;
import com.google.protobuf.DescriptorProtos.FileDescriptorProto;
import com.google.protobuf.DescriptorProtos.FileDescriptorSet;
import com.google.protobuf.Descriptors.FileDescriptor;
import com.google.protobuf.ProtocolStringList;
import io.cloudevents.v1.CloudEventServiceGrpc;
import io.cloudevents.v1.proto.CloudEvent;
import io.cloudevents.v1.proto.CloudEvent.CloudEventAttributeValue;
import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;
@SpringBootApplication
public class DemoGrpcApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(DemoGrpcApplication.class, args);
CloudEvent cloudEvent = CloudEvent.newBuilder()
.setTextData("{\"event_name\":\"SCF supports CloudEvent gRPC\"}")
.setSource("http://springsource.com")
.setId("12345")
.setSpecVersion("1.0")
.setType("org.springframework")
.putAttributes("name", CloudEventAttributeValue.newBuilder().setCeString("oleg").build())
.putAttributes("fluent_in_french", CloudEventAttributeValue.newBuilder().setCeBoolean(false).build())
.build();
ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 6048)
.usePlaintext().build();
CloudEventServiceGrpc.CloudEventServiceBlockingStub stub = CloudEventServiceGrpc.newBlockingStub(channel);
CloudEvent reply = stub.requestReply(cloudEvent);
System.out.println(reply);
}
@Bean
public Function<Message<String>, Message<String>> uppercase() {
return message -> {
return MessageBuilder.withPayload(message.getPayload().toUpperCase())
.copyHeaders(message.getHeaders())
.setHeader("uppercased", "true")
.build();
};
}
}