Golang:如何检查会话是否已连接/断开

时间:2016-07-05 06:38:36

标签: amazon-web-services go amazon-sqs

var svc *sqs.SQS = nil

func returnSvcInstance() *sqs.SQS{


                if svc == nil || condition (check if not connected) { //check if it is connected?

                    sess := session.New(&aws.Config{
                        Region : aws.String(REGION),
                        Credentials: CREDS,
                    })

                    svc = sqs.New(sess)     
                }

                return svc
}

我正在编写一个方法,如果它是nil或未连接,则返回实例。如何检查它是否仍然连接?

1 个答案:

答案 0 :(得分:1)

我的解决方案是在没有收到消息的情况下经过这么多次迭代后,将一条消息插入到队列中,并带有一个容易挑选的值。事实是,我有一个goroutine悬挂,但我用它来排除SQS连接。

我把它称为pingcounter并做了类似的事情:

pingCounter := 0
    for {
        if debug {
            log.Println("worker: Start polling")
        }
        if pingCounter > 9 {
            params := &sqs.SendMessageInput{
                QueueUrl: aws.String(queueName),
                MessageBody: aws.String("PING"),
            }
            _, err := svc.SendMessage(params)
            if awsErr, ok := err.(awserr.Error); ok {
                log.Println(awsErr.Message())
            } else {
                log.Println(err)
            }
...gather messsages and do stuff...
if not:
pingCounter++

我的工作代码接收了任何只是PING的消息并将其写入日志,然后将其删除。除了以可验证的方式使用它们之外,会话和服务对象不提供用于测试连接的任何其他方法。