在 2025 年 7 月 31 日 AWS golang sdk v1 的 EOS 公告之后,我将代码迁移到 v2。 我正在尝试将这段 v1 代码迁移到 v2:
type Service {
sqsService *sqs.SQS
}
....
func (s *Service) getSignedRequestsURL(queueURL string, maxNumOfMessages, visibilityTimeout, waitTimeSeconds int64) (string, error) {
req, _ := s.sqsService.ReceiveMessageRequest(&sqs.ReceiveMessageInput{
QueueUrl: aws.String(queueURL),
MaxNumberOfMessages: aws.Int64(maxNumOfMessages),
VisibilityTimeout: aws.Int64(visibilityTimeout),
WaitTimeSeconds: aws.Int64(waitTimeSeconds),
})
exp := 20 * time.Minute
signedURL, err := req.Presign(exp)
if err != nil {
return "", err
}
return b64.StdEncoding.EncodeToString([]byte(signedURL)), nil
}
使用v2 sdk,现在有一个SQS客户端,可以直接调用接收消息
var sqsClient *sqs.Client
...
res, err := sqsClient.ReceiveMessage(ctx, &sqs.ReceiveMessageInput{
QueueUrl: aws.String(queueURL),
....
})
如何模仿 req.Presign(exp) 功能来签署 SQS 接收消息 URL? 我是否需要手动构造 URL/请求并手动执行,或者 AWS 提供惯用的方法来执行此操作?我没有看到他们在哪里公开请求数据,以便用户可以在发送之前进行交互和修改..
您可以自定义身份验证工作流程,但首先客户端无法自动签署您的服务请求:
您可以使用 Amazon Web Services SDK 使用您最喜欢的编程语言访问 Amazon SQS。 SDK 自动执行以下任务:
- 以加密方式签署您的服务请求
- 重试请求
- 处理错误响应
通常 sqs.NewFromConfig 包含必要凭据的配置就足够了。