接收时,异步客户端未在1.9.x上调用Amazon SQS回调

时间:2015-11-13 04:39:05

标签: java amazon-sqs

我试图让sqs正在接收消息,但我遇到了一个问题。我使用的是sdk的1.9.40和Java 8,当我拨打以下电话时:

ReceiveMessageRequest request = new ReceiveMessageRequest(queueName).withMaxNumberOfMessages(10).withMessageAttributeNames("All").withAttributeNames("All");
sqs.receiveMessageAsync(request, this);

this实现AsyncHandler<ReceiveMessageRequest, ReceiveMessageResult>的地方永远不会调用我的回调。

我逐步完成了代码,问题似乎出现在这个函数中

public Future<ReceiveMessageResult> receiveMessage(ReceiveMessageRequest rq,
                                                       AsyncHandler<ReceiveMessageRequest, ReceiveMessageResult> handler) {
        // only handle simple requests, because these are the settings we pre-fetch with
        boolean noAttributes = (rq.getAttributeNames() == null) || rq.getAttributeNames().isEmpty();
        boolean noMessageAttributesToRetrieve = (rq.getMessageAttributeNames() == null)
                || rq.getMessageAttributeNames().isEmpty();
        boolean bufferngEnabled = (config.getMaxInflightReceiveBatches() > 0)
                && (config.getMaxDoneReceiveBatches() > 0);
        if (noMessageAttributesToRetrieve && noAttributes && bufferngEnabled && (rq.getVisibilityTimeout() == null)) {
            QueueBufferCallback<ReceiveMessageRequest, ReceiveMessageResult> callback = null;
            if (handler != null) {
                callback = new QueueBufferCallback<ReceiveMessageRequest, ReceiveMessageResult>(handler, rq);
            }

            QueueBufferFuture<ReceiveMessageRequest, ReceiveMessageResult> future = receiveBuffer.receiveMessageAsync(
                    rq, callback);
            future.setBuffer(this);
            return future;
        } else {
            return realSqs.receiveMessageAsync(rq);
        }
    }

具体在if语句中

if (noMessageAttributesToRetrieve && noAttributes && bufferngEnabled && (rq.getVisibilityTimeout() == null))

在if的内部设置回调,如果没有满足所有条件,它就不会调用回调。但是通过查看代码,我无法看到为什么请求任何类型的属性或缓冲会导致回调不被调用。这对我没有任何意义,所以我很好奇我做错了什么,或者为什么请求任何属性会导致回调不被调用。

0 个答案:

没有答案