Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 某些消息在SQS中丢失_Java_Amazon Sqs - Fatal编程技术网

Java 某些消息在SQS中丢失

Java 某些消息在SQS中丢失,java,amazon-sqs,Java,Amazon Sqs,我使用SQS和JavaSDK发送和接收消息。几乎所有的信息都正常工作,但有些信息丢失了,我不明白为什么。这是发送消息的代码: final SendMessageRequest msg=new SendMessageRequest( this.queueUrl,data.toString() ).withMessageGroupId(projectId); 最终映射属性=新HashMap(1); //消息签名-根据消息正文计算的HMAC 最终字符串签名=//正在计算签名 attrs.put( “签

我使用SQS和JavaSDK发送和接收消息。几乎所有的信息都正常工作,但有些信息丢失了,我不明白为什么。这是发送消息的代码:

final SendMessageRequest msg=new SendMessageRequest(
this.queueUrl,data.toString()
).withMessageGroupId(projectId);
最终映射属性=新HashMap(1);
//消息签名-根据消息正文计算的HMAC
最终字符串签名=//正在计算签名
attrs.put(
“签名”,
新消息AttributeValue()
.withDataType(“字符串”)
.带字符串值(签名)
);
attrs.put(
“项目”,
新消息AttributeValue()
.withDataType(“字符串”)
.带字符串值(projectId)
);
attrs.put(
“优先权”,
新消息AttributeValue()
.withDataType(“字符串”)
.具有字符串值(优先级)
);
msg.setMessageDeduplicationId(
字符串格式(“%s:%s”,项目ID,签名)
);
msg.setMessageAttributes(属性);
调试(此“发送消息:%s”,msg);
最终SendMessageResult res=this.sqs.sendMessage(msg);
Logger.info(
这
“已发送邮件“%s”(%s):%s”,
data.id(),data.type(),res
);
以及接收代码(在循环中运行):

final List messages=this.sqs.receiveMessage(
新的ReceiveMessageRequest(url)
.WithMessageAttributeName(
“项目”、“签名”、“到期”、“优先级”
)
.withVisibilityTimeout(
(int)分钟的持续时间(2L).getSeconds()
)
.withMaxNumberOfMessages(8)
).getMessages();
Logger.info(此“已接收%d条消息”,messages.size());
用于(最终消息:消息){
Logger.debug(这是“收到的消息:%s”,消息);
//这里的实际逻辑
this.sqs.deleteMessage(
新的DeleteMessageRequest()
.withQueueUrl(this.queue)
.withReceiptHandle(message.getReceiptHandle())
);
}
问题是我能够接收到一些消息,但有些消息不能(总是相同类型的数据
data.type()
)。发送和接收的代码对于所有消息都是相同的。 应用程序日志:

发送消息:{QueueUrl:,MessageBody:一些唯一的正文,MessageAttributes:{priority={StringValue:HIGH,StringListValues:[],BinaryListValues:[],DataType:String},signature={StringValue:EXTvx7WWrZ7uTU63szJ2C4VN/6ZOiw/wKL83qW7V3i0=,StringListValues:[],BinaryListValues:[],DataType:String},project={StringValue:PMO,StringListValues:[],BinaryListValues:[],数据类型:String},MessageDeduplicationId:PMO:EXTvx7WWrZ7uTU63szJ2C4VN/6ZOiw/wKL83qW7V3i0=,MessageGroupId:PMO}
已发送消息“e29baf85-7be4-449b-824f-e405c59cf7c4”([测试]){MD5OfMessageBody:9d6e98e0e85c8f5ca7cc4c23378dc14b,MD5OfMessageAttributes:fe94ccb1b405588e0691c91392d2c8ea,消息ID:c8ce957a-93c8-49ef-9a08-9E12CB592B52B54,序列号:1884897594699058772}
接收消息:限制=8;timout=2m
收到0条消息
接收消息:限制=8;timout=2m
收到0条消息
接收消息:限制=8;timout=2m
收到0条消息
接收消息:限制=8;timout=2m
收到0条消息

我检查了这些邮件的重复数据消除id是否始终不同,并且其内容也不同。如何更深入地调试此问题


更新: 我的队列中似乎满是消息,但我无法接收它们:

$aws sqs获取队列属性--队列url=“$QURL”--属性名称=近似EnumberOfMessages
{
“属性”:{
“信息的近似值”:“1490”
}
}
这很奇怪,因为即使队列已满,也会在几秒钟内发送一些消息


更新2:
我试着用,但没用

检查AWS控制台中是否存在针对该队列的任何机上请求,因为我可以看到您对所有消息使用相同的messagegroupid,因此,如果任何消费者收到任何一条消息,消息将按顺序处理,直到消息确认或可见性超时过期,其他消费者将不会收到任何消息。

检查AWS控制台中是否存在针对该队列的任何机上请求,因为我可以看到您对所有消息使用相同的messagegroupid,因此,如果任何消费者收到任何一条消息,消息将按顺序处理,在消息确认或可见性超时过期之前,其他使用者将不会收到任何消息