2016-07-05 3 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

내 솔루션은 메시지를받지 않고 반복적으로 반복하여 값을 선택하여 메시지를 큐에 삽입하는 것입니다. 진실은 매달린 goroutine을 가졌지 만 SQS 연결을 배제하기 위해 이것을 사용했습니다.

나는 그것은 pingcounter 전화와 같은했다 : 내 작업자 코드는 PING 단순히 전체이었고 로그에 쓴 모든 메시지를했다

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++ 

는, 다음을 삭제합니다. 세션 및 서비스 객체는 검증 가능한 방법으로 연결을 테스트하는 것 외에 연결을 테스트하는 다른 방법을 제공하지 않습니다.

관련 문제