我们正在尝试使用aws sqs temporary queues library在我们两个应用之间进行同步通信。一个应用程序使用AmazonSQSRequester
,而另一个应用程序使用AmazonSQSResponder
-两者均使用库中的构建器创建,并在应用程序配置中作为Spring bean连接。通过AWS控制台,我们创建了一个SQS队列,以用作请求/返回模式所需的“主机队列”。请求的应用程序发送到此队列,而响应的应用程序使用SQSMessageConsumer轮询队列并将消息传递到AmazonSQSResponder
。库的工作方式(我很确定)是请求者启动一个临时SQS队列(一个真正的静态队列),然后将该队列url作为属性发送给消息,然后发送给响应者,然后将其发送给响应者在那里回应。
应用之间的通信正常,并且会自动创建临时队列。问题在于,当请求程序应用程序关闭时,临时队列(现已孤立并且无用)在应由库清除时仍会保留。可以在this aws post中找到有关我们期望此清理工作的信息:
临时队列客户端客户端也解决了此问题。对于每个具有最近API调用的主机队列,客户端会定期使用TagQueue API操作来附加新的标记值,该值指示该队列仍在使用中。标记过程充当使队列保持活动状态的心跳。根据可配置的时间段(默认为5分钟),后台线程使用ListQueues API操作获取具有已配置前缀的所有队列的URL。然后,它将删除每个最近未标记的队列。
我们遇到的问题是,当我们终止请求者应用程序时,无法解释的消息出现在临时队列/响应队列中。我们不确定哪个应用将它们放在那里。队列中的消息会阻止自动清除。无法解释的消息共享相同的内容,短字符串:
.rO0ABXA =
答案 0 :(得分:1)
这似乎是通过https://github.com/awslabs/amazon-sqs-java-temporary-queues-client/issues/11库记录为错误的。希望很快会解决!