我想创建一个简单的gRPC端点,用户可以上传他/她的图片.协议缓冲区声明如下:
message UploadImageRequest {
AuthToken auth = 1;
// An enum with either JPG or PNG
FileType image_format = 2;
// Image file as bytes
bytes image = 3;
}
Run Code Online (Sandbox Code Playgroud)
无论gRPC文档中的警告如何,这种上传图片(和接收图片)的方法仍然可以吗?
如果没有,使用标准表格上传图片并存储图像文件位置是更好的方法(标准)吗?
我想在 asp.net 核心 Web 应用程序中使用带有 .NET 的 gRPC。如何从现有的 C# 类和模型对象生成必要的 .proto 文件?我不想重新编写反映现有代码的 .proto 文件,我希望从类和模型对象自动生成 .proto 文件。
我调用这个方法来注册我的服务类。
builder.MapGrpcService<MyGrpcService>();
public class MyGrpcService
{
public Task<string> ServiceMethod(ModelObject model, ServerCallContext context)
{
return Task.FromResult("It Worked");
}
}
Run Code Online (Sandbox Code Playgroud)
ModelObject有[DataContract]和[DataMember]有订单属性。
这可能吗?我在网上看到的每个例子都以一个.proto文件开头。我已经在MyGrpcService类中定义了我想要的服务方法。但也许这只是落后于标准的做事方式......
像旧的 .NET 远程处理这样的东西是理想的,您可以从远程端点请求一个接口,它神奇地用于gRPC来回通信,但也许这太简单了。
我可以成功运行gRPC client,并gRPC server在c++现在我希望建立节点A和GRPC服务器即之间的通信node B的连接形象.
我可以参考下面的任何例子是我正在寻找的.
我有这个节点A带http消息(GET方法)我需要解析,即提取消息并在节点C上运行请求.我应该在节点A和gRPC服务器之间寻找什么.
提前致谢
我有一个用例,其中许多客户端需要不断向服务器发送大量指标(几乎是永久的)。服务器需要存储这些事件,并在以后处理它们。我不希望服务器对这些事件有任何响应。
我正在考虑为此使用grpc。最初,我认为客户端流可以做(就像 envoy 那样),但问题是客户端流不能确保在应用程序级别的可靠交付(即,如果流在两者之间关闭,则实际处理了多少发送的消息由服务器),我负担不起。
我的思考过程是,我应该使用双向流、服务器流中的 acks 或多个一元 rpc 调用(可能在重复字段中对事件进行一些批处理以提高性能)。
这些哪个会更好?
我在android实现中使用带有protobuf lite的grpc。但是 protobuf lite 没有 google 时间戳,而我的 protos 导入了“google/protobuf/timestamp.proto”。所以我添加了实现 'com.google.protobuf:protobuf-java:3.7.1' 到包含谷歌时间戳的gradle。但在那之后代码编译有错误。例如 :Duplicate class com.google.protobuf.AbstractMessageLite 在模块 protobuf-java-3.7.1.jar (com.google.protobuf:protobuf-java:3.7.1) 和 protobuf-lite-3.0.1.jar ( com.google.protobuf:protobuf-lite:3.0.1)。任何解决此问题的想法将不胜感激。
apply plugin: 'com.android.application'
apply plugin: 'com.google.protobuf'
android {
compileSdkVersion 28
buildToolsVersion "29.0.0"
defaultConfig {
minSdkVersion 21
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
sourceSets {
main {
proto {
srcDir 'src/main'
}
java {
srcDir 'src/main'
}
} …Run Code Online (Sandbox Code Playgroud) 我按照以下说明操作:
在 .NET Core 中创建 gRPC 服务和客户端,一切都很好。
接下来,我需要一个旧的 .NET 框架应用程序访问该服务。我找到了一些安装的 NuGet 包,但没有找到任何告诉您如何使用它们来制作 gRPC 客户端的内容。我确定它在某个地方,但目前被 .NET Core 版本的文档淹没了。
我尝试创建一个 .NET Standard 项目来弥补差距,但 .Net Core 包需要 .Net Standard 2.1,它没有使用任何版本的 .Net Framework 来引用它。
谁能告诉我如何做到这一点或为我指明正确的方向?
编辑:所以我找到了一些 .Net Framework 与 gRPC 一起使用的代码。.Net Framework 示例默认为不安全连接,而 .Net Core 示例默认为安全连接。关于如何改变任何一个都没有明确的路径。我试过生成一个证书来让客户端连接,但这没有用。
所以我的新问题是:有谁知道如何说服 .Net Core gRPC 服务接受不安全的 (http:) 连接?
我有一个 Go gRPC 客户端连接到在 k8s 集群中的不同 pod 中运行的 gRPC 服务器。
它运行良好,可以接收和处理请求。
我现在想知道在 gRPC 服务器 Pod 被回收的情况下如何最好地实现弹性。
据我所知,clientconn.go 代码应该自动处理重新连接,但我就是无法让它工作,我担心我的实现在第一个实例中是不正确的。
从 main 调用代码:
go func() {
if err := gRPCClient.ProcessRequests(); err != nil {
log.Error("Error while processing Requests")
//do something here??
}
}()
Run Code Online (Sandbox Code Playgroud)
我在 gRPCClient 包装器模块中的代码:
func (grpcclient *gRPCClient) ProcessRequests() error {
defer grpcclient.Close()
for {
request, err := reqclient.stream.Recv()
log.Info("Request received")
if err == io.EOF {
break
}
if err != nil {
//when pod is recycled, this is what's hit …Run Code Online (Sandbox Code Playgroud) 我已经看到了使用Protobuf v3声明gRPC服务的两种不同方式.有些代码的rpc行末尾带有分号(例如当前的proto3文档):
service SearchService {
rpc Search (SearchRequest) returns (SearchResponse);
}
Run Code Online (Sandbox Code Playgroud)
其他代码的rpc行结尾为 {}:
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
Run Code Online (Sandbox Code Playgroud)
这两个都使用protoc v3.0.0-alpha-2编译器编译并生成相同的(go)代码.
这两种语法有什么区别?
我一直在研究Apache Thrift,ProtoBuf和Flatbuffers.我发现教程在链接中使用带有protobuf的gRPC,但我没有找到任何使用gRPC和Flatbuffers的文档.有人可以指点我的相关文件吗?我在谷歌和Stackoverflow上查了一下.任何帮助,将不胜感激.
我正在使用谷歌grpc与json代理.由于某种原因,我需要omitempty从*.pb.go文件中生成的结构中删除标记.
如果我有这样的原型消息
message Status {
int32 code = 1;
string message = 2;
}
Run Code Online (Sandbox Code Playgroud)
生成的结构看起来像这样
type Status struct {
Code int32 `protobuf:"varint,1,opt,name=code" json:"code,omitempty"`
Message string `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"`
}
Run Code Online (Sandbox Code Playgroud)
但我需要omitempty从生成的结构中删除标记.我怎样才能做到这一点?