为了账号安全,请及时绑定邮箱和手机立即绑定

AWS Kinesis:确定命名流是否存在

AWS Kinesis:确定命名流是否存在

Go
潇湘沐 2021-12-20 09:56:05
我的目标是使用 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条经验 获得超5个赞

描述流。如果流不存在,则创建流并旋转等待变为活动状态。

流创建后,您将无法立即推送到流。它将首先过渡到 CREATING,一段时间(几秒钟)后过渡到 ACTIVE。

https://docs.aws.amazon.com/sdk-for-go/api/service/kinesis/Kinesis.html#DescribeStream-instance_method

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


查看完整回答
反对 回复 2021-12-20
  • 1 回答
  • 0 关注
  • 251 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号