我正在尝试实现以下方案,我真的可以使用并感谢一些帮助。我正在使用带有驼峰2.21的ActiveMQ 5.14。
在队列中,每条消息对应一台机器。这些机器通过单个轮询消费者连接到队列,并且与消费者无法区分。消息应保留在队列中,直到一台机器通过单独的请求确认它已到达正确的机器。每次获取一条消息后,所述消息应该被锁定一段时间。
我找不到任何可以转换为我的问题的ActiveMQ功能。我的方法是在每次获取后将消息发送到第二个队列,该队列充当锁定机制,并在指定的超时后将其发送回可获取队列。 如果机器没有确认消息,则可能更好的方法是在每次提取后回滚会话。
您对此问题的可行解决方案有什么建议吗?
修改:更多细节以澄清情况
应用程序通过两次调用将REST API暴露给Web来与客户进行通信: GET 和 DELETE 。
GET从队列中获取下一条消息,DELETE从队列中删除该消息。我需要确保消息仅在给定时间段内被提取一次,并且如果客户端没有发送DELETE请求,它将返回队列。目前我有一条从其余服务到bean的路由,它从队列中获取消息,将其返回给GET请求,然后将其发送回队列。在DELETE请求中,我使用给定的id从队列中取消消息。
我仍然需要找到一种方法来确保在指定的时间段内无法访问上次获取的消息。
答案 0 :(得分:2)
我对使用无法区分的机器的部分感到有点困惑,但我理解以下内容:
如果这些假设是正确的,您可以构建一个Camel路由,该路由使用来自队列的消息(已处理)并调用该服务。
如果
,此行为或多或少是默认行为修改强>
根据你的澄清,我明白这是我所假设的另一种方式。
那么我可能会将这两种请求类型视为“工作流程步骤”,因为它们是从客户端触发的。
获取强>
delievered
)删除强>
delievered
队列未删除的消息
使用第二个队列可以获得各种优势
delievered
仅队列消息