我的目標是使用 AWS Kinesis API 創建一個具有特定名稱的 Kinesis 流(如果它尚不存在),然后寫入它,無論它是否首先存在。這是我到目前為止想出的。嘗試創建流。如果它失敗并顯示代碼 400 并返回一個請求 ID,那么該流可能已經存在。然后寫入流以確保它在那里。在圍棋中:k := kinesis.New(session.New())_, err := k.CreateStream(&kinesis.CreateStreamInput{ ShardCount: aws.Int64(2), StreamName: aws.String("stream"),})if err != nil { if reqerr, ok := err.(awserr.RequestFailure); ok { if reqerr.RequestID() == "" { log.Fatal("request was not delivered as it has no ID", reqerr.Code(), reqerr.Message(), ) } if reqerr.StatusCode() != 400 { log.Fatal("unexpected status code", reqerr.StatusCode()) } } else { log.Fatal(err) }}// Code 400 + requestID does not necessarily mean that the stream exists// So write to the stream to confirm it exists_, err = k.PutRecord(&kinesis.PutRecordInput{ Data: []byte("Hello Kinesis"), PartitionKey: aws.String("partitionkey"), StreamName: aws.String("stream"),})if err != nil { log.Fatal(err)}上面的方法似乎令人費解,更重要的是,我認為它不能有效地匹配我期望的確切錯誤。對錯誤消息進行字符串比較似乎也是一個糟糕的選擇,因為這很容易改變。我想知道是否有更可靠和直接的方法來實現這一目標?列出所有可用的流進行搜索是一件痛苦的事情,因為它是一種線性搜索,并且涉及多個具有新值 的請求ExclusiveStartStreamName。
1 回答

慕娘9325324
TA貢獻1783條經驗 獲得超4個贊
描述流。如果流不存在,則創建流并旋轉等待變為活動狀態。
流創建后,您將無法立即推送到流。它將首先過渡到 CREATING,一段時間(幾秒鐘)后過渡到 ACTIVE。
https://docs.aws.amazon.com/sdk-for-go/api/service/kinesis/Kinesis.html#CreateStream-instance_method
您還可以使用 ListStreams 快速查看所有流的狀態:
https://docs.aws.amazon.com/sdk-for-go/api/service/kinesis/Kinesis.html#ListStreams-instance_method
- 1 回答
- 0 關注
- 189 瀏覽
添加回答
舉報
0/150
提交
取消