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 或未连接则返回实例。如何检查它是否仍然连接?
最佳答案
我的解决方案是在多次迭代后没有收到消息的情况下,将一条消息插入到队列中,该消息具有易于挑选的值。事实上,我挂了一个 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 的消息并将其写入日志,然后将其删除。除了以可验证的方式使用它们之外, session 和服务对象不提供任何其他方法来测试连接。
关于amazon-web-services - 转到 AWS SQS SDK : How to check if session is connected/disconnected,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38196726/