producer.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package main
  2. import (
  3. "context"
  4. "encoding/json"
  5. "io"
  6. "log"
  7. "math/rand"
  8. "time"
  9. "github.com/aws/aws-sdk-go-v2/aws"
  10. "github.com/aws/aws-sdk-go-v2/service/sqs"
  11. "github.com/aws/aws-sdk-go-v2/service/sqs/types"
  12. )
  13. func sendOne(ctx context.Context, client *sqs.Client, qURL string) {
  14. data := map[string]int{"a": rand.Int()}
  15. data["b"] = data["a"] + 1
  16. bs, _ := json.Marshal(data)
  17. body := string(bs)
  18. ma := map[string]types.MessageAttributeValue{
  19. "x": {
  20. DataType: aws.String("String"),
  21. StringValue: aws.String("a string value"),
  22. },
  23. "y": {
  24. DataType: aws.String("Number"),
  25. StringValue: aws.String("42"),
  26. },
  27. }
  28. smr := sqs.SendMessageInput{
  29. MessageBody: &body,
  30. QueueUrl: &qURL,
  31. DelaySeconds: 0,
  32. MessageAttributes: ma,
  33. MessageDeduplicationId: nil,
  34. MessageGroupId: nil,
  35. MessageSystemAttributes: nil,
  36. }
  37. smo, err := client.SendMessage(ctx, &smr)
  38. if err != nil {
  39. log.Printf("failed producing message: %v", err)
  40. } else if smo.MessageId == nil {
  41. log.Println("message produced with a nil ID")
  42. } else {
  43. log.Printf("message %s produced with %#v", *smo.MessageId, data)
  44. }
  45. }
  46. func sender(ctx context.Context, _ io.Writer, client *sqs.Client, qURL string) {
  47. pinger := time.NewTicker(2 * time.Second)
  48. for range pinger.C {
  49. sendOne(ctx, client, qURL)
  50. }
  51. }