Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Gunakan gRPC untuk memindahkan data pangkalan data serta-merta selepas perubahan jadual

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

WBOY
WBOYke hadapan
2024-02-05 11:49:31422semak imbas

表更改后立即使用 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;
}

// struktur jadual postgres

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

// 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
}


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
}

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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam