最新公告
  • 欢迎您光临码农资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!加入我们
  • 表更改后立即使用 gRPC 传输数据库数据

    表更改后立即使用 grpc 传输数据库数据

    问题内容

    我正在使用 go、grpc 和 postgres 制作任务列表。

    如何在调用 postitem 插入新数据时自动流式传输数据?我需要订阅 postgres 还是可以在不订阅或发布订阅的情况下完成此操作?

    // protobuf 架构

    syntax = "proto3";
    
    package tasklist;
    
    import "google/protobuf/empty.proto";
    
    service todolist {
      rpc gettasks(google.protobuf.empty) returns (stream gettasksresponse) {}
      rpc postitem(postitemrequest) returns (posttaskrequest) {}
    }
    
    
    message task {
      int64 id = 1;
      string name = 2;
    }
    
    message gettasksresponse {
      task task = 1;
    }
    
    message posttaskrequest {
      task task = 1;
    }
    
    message postitemresponse {
      bool result = 1;
    }
    
    

    // postgres 表架构

    create table task (
      id integer not null primary key,
      name varchar(10) not null
    );
    

    // 继续

    func (s *server) GetTasks(_ *empty.Empty, stream pb.TaskList_GetTasksServer) error {
        // How can I steam data as soon as `PostTask` is called to update db? <- <-
        for _, r := range s.requests {
            // stream data
        }
    }
    
    func (s *server) PostTask(ctx context.Context, r *pb.PostTaskRequest) (*pb.PostTaskResponse, error) {
        // update Postgres here
        return &pb.PostItemResponse{Result: true}, nil
    }
    
    

    正确答案

    我猜 s.requests 类似于 chan task。因此,在成功 // update postgres here 之后,您可以在 chan 中发送您的请求。

    func (s *server) PostTask(ctx context.Context, r *pb.PostTaskRequest) (*pb.PostTaskResponse, error) {
        postTask := toDomain(r)
        err := s.service.UpdateTask(ctx, postTask)
        if err != nil {
            return nil, status.Error(codes.Internal, err.Error())
        }
        s.requests <- postTask
        return &pb.PostItemResponse{Result: true}, nil
    }
    想要了解更多内容,请持续关注码农资源网,一起探索发现编程世界的无限可能!
    本站部分资源来源于网络,仅限用于学习和研究目的,请勿用于其他用途。
    如有侵权请发送邮件至1943759704@qq.com删除

    码农资源网 » 表更改后立即使用 gRPC 传输数据库数据
    • 7会员总数(位)
    • 25846资源总数(个)
    • 0本周发布(个)
    • 0 今日发布(个)
    • 293稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情