2016-07-05 8 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 
} 

Nilであるか接続されていない場合にインスタンスを返すメソッドを作成しています。まだ接続されているかどうかを確認するには?Golang:セッションが接続されているかどうかを確認する方法

+1

確認できる接続はありません。 「セッション」は、AWS SDkの共有設定の単なる言葉です。 – Danilo

+0

それで切断されますか?私は長いポーリングを使用しようとしていますので、この 'svc'をループまたは繰り返し使用する必要があります –

+1

' sqs.SQS'構造体の作成には何もできません。ポーリングを長くすると、クライアントはメッセージが返されるまで指定された時間(SQSで最大20秒)待機します。 func '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の単純いっぱいだった任意のメッセージを取って、ログにそれを書きました。セッションオブジェクトとサービスオブジェクトは、検証可能な方法でそれらを使用する以外に、接続をテストするための他の方法を提供しません。

関連する問題