我需要在1次读取中读取Amazon SQS队列中的所有消息,然后根据创建的时间戳对其进行排序并对其执行业务逻辑.
为了确保检查所有SQS主机的消息,我启用了长轮询.我这样做的方法是将队列的默认等待时间设置为10秒.(任何大于0的值都将启用长轮询).
但是,当我尝试读取队列时,它仍然没有给我所有的消息,我不得不做多次读取以获取所有消息.我甚至通过每个接收请求的代码启用长轮询,仍然无法正常工作.以下是我正在使用的代码.
AmazonSQSClient sqsClient = new AmazonSQSClient(new ClasspathPropertiesFileCredentialsProvider());
sqsClient.setEndpoint("sqs.us-west-1.amazonaws.com");
String queueUrl = "https://sqs.us-west-1.amazonaws.com/12345/queueName";
ReceiveMessageRequest receiveRequest = new ReceiveMessageRequest().withQueueUrl(queueUrl).withMaxNumberOfMessages(10).withWaitTimeSeconds(20);
List<Message> messages = sqsClient.receiveMessage(receiveRequest).getMessages();
Run Code Online (Sandbox Code Playgroud)
我在队列中有3条消息,每次运行代码时都得到不同的结果,有时候我得到所有3条消息,有时只有1条.可见性超时我设置为2秒,只是为了消除消息变得不可见的原因因为没有在阅读中看到它们.这是短轮询的预期行为.长轮询应该可以消除多个民意调查.我在这里做错了吗?
谢谢
我有一个 Spring Web 应用程序,它是作为 Maven 工件 A.war 创建的。它有一个带有工件 B.jar 的 maven 依赖项。工件 B 的 src/main/resources 有一个文件 test.txt。我想从工件 A.war 中读取文件 test.txt。当我分解 B.jar 时,我看到 test.txt 位于 jar 的根目录中。B.jar 最终出现在爆炸的 A.war 的 WEB-INF/lib 中。在 A 中,我尝试使用 File f = new ClassPathResource("test.txt").getFile(); 读取文件。
我收到 java.io.FileNotFoundException: 类路径资源 [test.txt] 无法解析为绝对文件路径,因为它不在文件系统中:jar:B.jar!/test.txt。我也试过 File f = new File(getClass().getResource("test.txt").toURI());
有人可以帮忙吗?