2015-01-31 124 views
1

我正在嘗試連接到AWS SQS以創建一個新隊列並獲取已放置在另一個隊列中的消息。這是我使用的代碼:AWSSQS嘗試創建隊列並獲取消息

AWSSQS *sqs=[[AWSSQS alloc] initWithConfiguration:configuration]; 

    AWSSQSCreateQueueRequest *createQueue = [[AWSSQSCreateQueueRequest alloc] init]; 
    [createQueue setQueueName:@"TEST_Q2_NEW_3"]; 

    BFTask *answer = [sqs createQueue:createQueue];  
    NSLog(@"Status queue creation: %@ %@", answer.result, answer.error); 

    AWSSQSReceiveMessageRequest *receiveMessageRequest = [[AWSSQSReceiveMessageRequest alloc] init];  
    receiveMessageRequest.QueueUrl = @"https://sqs.eu-west-1.amazonaws.com/xxxxxxxxxxxx/TEST_Q"; 

    answer = [sqs receiveMessage:receiveMessageRequest]; 
    NSLog(@"Status messages received %@ %@", answer.result, answer.error); 

創建隊列TEST_Q2_NEW_3但日誌信息是:

狀態隊列創建:(空)(空)

沒有消息牽強,但在SQS管理控制檯中有一些狀態消息正在運行。但是,日誌消息是:收到的(空)(空)

我缺少什麼

狀態信息?

回答

0

原來我並沒有完全理解BFTasks。聲明:

answer = [sqs receiveMessage:receiveMessageRequest]; 

實際上在後臺啓動一個進程並打印日誌消息時,這個任務尚未完成。要繼續處理結果,您必須使用continueWithBlock。工作代碼看起來像這樣的接收消息的功能:

answer = [sqs receiveMessage:receiveMessageRequest]; 
[answer continueWithBlock:^id(BFTask *task) { 
    if (task.isCancelled) { 
     NSLog(@"Status received messages %@ %@", answer.result, answer.error); 
    } else if (task.error) { 
     NSLog(@"Status received messages %@ %@", answer.result, answer.error); 
    } else { 
     NSLog(@"Status received messages %@ %@", answer.result, answer.error); 
    } 
    return nil; 
}]; 

這是我找到了答案: BoltsFramework/Bolts-iOS - GitHub