2016-07-05 39 views
0
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 
} 

我正在寫一個方法,如果它爲零或未連接,則返回實例。如何檢查它是否仍然連接?Golang:如何檢查會話是否連接/斷開

+1

沒有連接,你可以檢查。對於AWS SDk中的共享配置,「會話」只是一個奇特的詞彙。 – Danilo

+0

它會斷開嗎?我正在嘗試使用長輪詢,所以我必須在循環中或重複使用此'svc' –

+1

這與創建'sqs.SQS'結構沒有任何關係。當您長時間輪詢時,客戶端將等待指定的時間(SQS上最多20秒)以等待消息返回。函數'func(* SQS)ReceiveMessage'將在指定的時間後返回或者消息變爲可用 – Danilo

回答

1

我給這解決辦法是插入一個消息到隊列有這麼多的迭代之後容易挑出值而沒有接收的消息。事實是我掛了一個門廳,但我用這個來排除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的,並寫信給日誌的任何消息,然後將其刪除。除了以可驗證的方式使用它們之外,會話和服務對象不提供任何其他用於測試連接的方法。