1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- package services
- import (
- "context"
- "encoding/json"
- "io"
- "log"
- "math/rand"
- "time"
- "github.com/aws/aws-sdk-go-v2/aws"
- "github.com/aws/aws-sdk-go-v2/service/sqs"
- "github.com/aws/aws-sdk-go-v2/service/sqs/types"
- "github.com/fgm/izidic"
- )
- func ProducerService(dic *izidic.Container) (any, error) {
- cli := dic.MustService("sqs").(*sqs.Client)
- w := dic.MustParam(PWriter).(io.Writer)
- return func(ctx context.Context, qName string) {
- senderHandler(ctx, w, cli, qName)
- }, nil
- }
- func senderHandler(ctx context.Context, _ io.Writer, client *sqs.Client, qURL string) {
- pinger := time.NewTicker(2 * time.Second)
- for range pinger.C {
- sendOne(ctx, client, qURL)
- }
- }
- func sendOne(ctx context.Context, client *sqs.Client, qURL string) {
- data := map[string]int{"a": rand.Int()}
- data["b"] = data["a"] + 1
- bs, _ := json.Marshal(data)
- body := string(bs)
- ma := map[string]types.MessageAttributeValue{
- "x": {
- DataType: aws.String("String"),
- StringValue: aws.String("a string value"),
- },
- "y": {
- DataType: aws.String("Number"),
- StringValue: aws.String("42"),
- },
- "retry": {
- DataType: aws.String("String"),
- StringValue: aws.String("1"),
- },
- }
- smr := sqs.SendMessageInput{
- MessageBody: &body,
- QueueUrl: &qURL,
- DelaySeconds: 0,
- MessageAttributes: ma,
- MessageDeduplicationId: nil,
- MessageGroupId: nil,
- MessageSystemAttributes: nil,
- }
- smo, err := client.SendMessage(ctx, &smr)
- if err != nil {
- log.Printf("failed producing message: %v", err)
- } else if smo.MessageId == nil {
- log.Println("message produced with a nil ID")
- } else {
- log.Printf("message %s produced with %#v", *smo.MessageId, data)
- }
- }
|