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