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或未连接,则返回实例。如何检查它是否仍然连接?
答案 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的消息并将其写入日志,然后将其删除。除了以可验证的方式使用它们之外,会话和服务对象不提供用于测试连接的任何其他方法。