问题内容 我正在使用 Go、grpc 和 postgres 制作任务列表。 如何在调用 postitem 插入新数据时自动流式传输数据?我需要订阅 postgres 还是可以在不订阅或
我正在使用 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
}
--结束END--
本文标题: 表更改后立即使用 gRPC 传输数据库数据
本文链接: https://lsjlt.com/news/560961.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0