Files
IoT/internal/service/sqsclient/sqsclient.go
T

39 lines
1.3 KiB
Go

// Package sqsclient — общий фабричный клиент shared-SQS для монолита.
//
// Используют: bridge (SendMessage), consumer (ReceiveMessage/DeleteMessage),
// admin-stats (GetQueueUrl/GetQueueAttributes).
package sqsclient
import (
"context"
"fmt"
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/credentials"
"github.com/aws/aws-sdk-go-v2/service/sqs"
"gitea.services.ngcloud.ru/Nail/IoT/internal/service/config"
)
// New создаёт SQS-клиент с переопределённым endpoint (self-hosted shared-sqs).
func New(cfg *config.Config) *sqs.Client {
return sqs.New(sqs.Options{
Region: cfg.SQSRegion,
Credentials: credentials.NewStaticCredentialsProvider(
cfg.SQSAccessKey, cfg.SQSSecretKey, "",
),
BaseEndpoint: aws.String(cfg.SQSEndpoint),
})
}
// ResolveQueueURL получает URL очереди по имени (один вызов при старте).
func ResolveQueueURL(ctx context.Context, client *sqs.Client, queueName string) (string, error) {
out, err := client.GetQueueUrl(ctx, &sqs.GetQueueUrlInput{
QueueName: aws.String(queueName),
})
if err != nil {
return "", fmt.Errorf("sqs: GetQueueUrl %q: %w", queueName, err)
}
return aws.ToString(out.QueueUrl), nil
}