首頁 > 後端開發 > Golang > 表更改後立即使用 gRPC 傳輸資料庫數據

表更改後立即使用 gRPC 傳輸資料庫數據

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
發布: 2024-02-05 11:49:31
轉載
543 人瀏覽過

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

問題內容

我正在使用 go、grpc 和 postgres 製作任務清單。

如何在呼叫 postitem 插入新資料時自動串流資料?我需要訂閱 postgres 還是可以在不訂閱或發布訂閱的情況下完成此操作?

// protobuf 架構

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

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 表架構

1

2

3

4

create table task (

  id integer not null primary key,

  name varchar(10) not null

);

登入後複製

// 繼續

1

2

3

4

5

6

7

8

9

10

11

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 中發送您的請求。

1

2

3

4

5

6

7

8

9

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

}

登入後複製

以上是表更改後立即使用 gRPC 傳輸資料庫數據的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板