i/o timeout issue when receiving the message on SQS and memory leak https usage

Viewed 372

AWS SDK Version: v1.38.19

Go Version: go1.15.7

alpine 3.7

I am using the standard queue I am initializing the SQS connection at once in my application like this;

// Connection connection to the SQS
var Connection *sqs.SQS

// InitSQS initialize the AWS SQS connection
func InitSQS() {
    sess := session.Must(session.NewSessionWithOptions(session.Options{
        SharedConfigState: session.SharedConfigEnable,
    }))

    Connection = sqs.New(sess, &aws.Config{
        Region:     aws.String("eu-west-1"),
        DisableSSL: aws.Bool(true),
    })
}

I am disabling the SSL because; I am having memory and CPU leaks when I am going with the SSL in my application (my application isn't open for the rest of the world btw it's an internal service for my other applications).

Here is the config I use to read a message from SQS:

func ConsumeUpdateMessage(db *database.MySQLWrap, sqsApi queue.SQSAPI) error {
    result, err := sqsApi.ReceiveMessage(&sqs.ReceiveMessageInput{
        AttributeNames: []*string{
            aws.String(sqs.MessageSystemAttributeNameSentTimestamp),
        },
        MessageAttributeNames: []*string{
            aws.String(sqs.QueueAttributeNameAll),
        },
        QueueUrl:            &qURL,
        MaxNumberOfMessages: aws.Int64(10),
        WaitTimeSeconds:     aws.Int64(20),
    })

    if err != nil {
        return fmt.Errorf("error on receiving the message from queue: %s", err.Error())
    }

    for _, msg := range result.Messages {
            // business logic
        }

    return err
}

this is how I am calling the ConsumeUpdateMessage method;

// InitializeUpdateMessage ..
func InitializeUpdateMessage(db *database.MySQLWrap, sqsApi queue.SQSAPI) {
    go func() {
        for {
            time.Sleep(500 * time.Millisecond)

            err := ConsumeUpdateMessage(db, sqsApi)

            if err != nil {
                log.Error(err)

                continue
            }
        }
    }()
}

but sometimes my subscriber return error like this;

*awserr.baseError: RequestError: send request failed
caused by: Post "http://sqs.eu-west-1.amazonaws.com/": dial tcp xx.x.xx.xxx:80: i/o timeout

(Note: I put xx instead of sharing the IP Address)

I made my search over the forums and other places but I can't find a solution for these two-issue,

  1. Memory leak when I using the connection with SSL (idea: but since my application is an internal service I think I don't have to use with SSL)
  2. i/o timeout
0 Answers
Related