python gRPC错误:“错误”:“13内部:未能序列化响应!”尝试返回重复消息而不是列表请求中的流时

2024-09-27 18:10:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有django REST API,我正试图将其转换为gRPC。我按照Django grpc framework guide创建了以下文件:

型号.py
class Organization(models.Model):
    Org_name = models.CharField(max_length=100, unique=True, primary_key=True, db_index=True)
    Address = models.CharField(max_length=100)
    Description = models.CharField(max_length=500)
    Number_of_emp = models.IntegerField()
org.proto

package org;

import "google/protobuf/empty.proto";

service OrganizationController {
    rpc List(OrganizationListRequest) returns (Organizations) {}
    rpc Create(Organization) returns (Organization) {}
    rpc Retrieve(OrganizationRetrieveRequest) returns (Organization) {}
    rpc Update(Organization) returns (Organization) {}
    rpc Destroy(Organization) returns (google.protobuf.Empty) {}
}

message Organization {
    string Org_name = 1;
    string Address = 2;
    string Description = 3;
    int32 Number_of_emp = 4;
}

message OrganizationListRequest {
}

message OrganizationRetrieveRequest {
    string Org_name = 1;
}

message Organizations {
    repeated Organization organization = 1;
}

注意,Organizations是org.proto中声明的一条消息,用于返回一个列表或一个对象数组

服务。py
class OrganizationService(generics.ModelService):
    queryset = Organization.objects.all()
    serializer_class = OrganizationSerializerProto
序列化程序.py
class OrganizationSerializerProto(proto_serializers.ModelProtoSerializer):
    class Meta:
        model = Organization
        proto_class = org_pb2.Organization
        fields = '__all__'

问题我想使用rpc List(OrganizationListRequest) returns (Organizations) {}请求获取数据库中所有组织的列表。但是,无论何时调用rpc,都会出现以下错误: request error: "error": "13 INTERNAL: Failed to serialize response!"(我使用BloomRPC gui客户端发出请求)

但是,如果我将
rpc List(OrganizationListRequest) returns (Organizations) {}更改为
rpc List(OrganizationListRequest) returns (stream Organization) {}
请求返回正常工作,我得到一个包含AllObject的响应流。我不希望返回流中的数据,我希望它返回一个对象数组,但是使用message Organizations {repeated Organization organization = 1;}会抛出上述错误。 我犯错误了吗?我到处找,但找不到这个错误。或者不可能进行这样的RPC调用吗


Tags: namepyorgmessagestringmodelsrpclist
1条回答
网友
1楼 · 发布于 2024-09-27 18:10:19

这是服务器端协议编解码器错误。这通常是因为:

  1. 客户端/服务器之间生成的原型库不一致
  2. 类型不匹配消息(如已发送的Organizations而不是Organization

gRPC Python将记录导致Failed to serialize response!错误的异常。可以通过logging.basicConfig(level=logging.INFO)显式启用Python日志记录。以下是到日志记录行的链接:

https://github.com/grpc/grpc/blob/bed585bdcb5cbbbfb407b4e869665d405b04adca/src/python/grpcio/grpc/_common.py#L88

如果在上述检查之后,错误仍然存在,您能否创建一个复制案例并发送到https://github.com/grpc/grpc/issues

相关问题 更多 >

    热门问题