AWS Kinesis:确定命名流是否存在
AWS Kinesis: determine whether a named stream exists
我的目标是使用 AWS Kinesis API 创建一个具有特定名称的 Kinesis 流(如果它不存在)然后写入它,无论它是否存在。
这就是我到目前为止的想法。尝试创建流。如果失败并显示代码 400 和 returns 请求 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
.
的请求
描述流。如果流不存在,则创建流并自旋等待变为活动状态。
创建后您将无法立即推送到流。它将首先过渡到 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
我的目标是使用 AWS Kinesis API 创建一个具有特定名称的 Kinesis 流(如果它不存在)然后写入它,无论它是否存在。
这就是我到目前为止的想法。尝试创建流。如果失败并显示代码 400 和 returns 请求 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
.
描述流。如果流不存在,则创建流并自旋等待变为活动状态。
创建后您将无法立即推送到流。它将首先过渡到 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