Gunakan gRPC untuk memindahkan data pangkalan data serta-merta selepas perubahan jadual

WBOY
Lepaskan: 2024-02-05 11:49:31
ke hadapan
474 orang telah melayarinya

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

Kandungan soalan

Saya sedang membuat senarai tugas menggunakan go, grpc dan postgres.

Bagaimana untuk menstrim data secara automatik semasa memanggil postitem untuk memasukkan data baharu? Adakah saya perlu melanggan postgres atau bolehkah ini dilakukan tanpa melanggan atau menerbitkan melanggan?

// seni bina 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;
}

Salin selepas log masuk

// struktur jadual postgres

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

// Teruskan

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
}

Salin selepas log masuk


Jawapan betul


Saya rasa s.requests 类似于 chan task。因此,在成功 // update postgres here Selepas itu anda boleh menghantar permintaan anda dalam 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
}
Salin selepas log masuk

Atas ialah kandungan terperinci Gunakan gRPC untuk memindahkan data pangkalan data serta-merta selepas perubahan jadual. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan