我有一个消费者检查队列中的消息,然后尝试根据消息进行一些处理。如果出现问题,它应该将消息留在队列中,否则它应该确认收到并从队列中删除它。
阅读文档时,似乎在单个邮件上使用CLIENT_ACKNOWLEDGE
并调用acknowledge
会确认在该会话期间收到的所有邮件。
static final int CLIENT_ACKNOWLEDGE
使用此确认模式,客户端通过调用消息的确认方法来确认消耗的消息。确认已消耗的消息会确认会话已消耗的所有消息。
这意味着我需要为我正在消费的每条消息单独创建一个会话。这似乎非常低效。有没有更好的方法来处理这个? (也许是一种将消息放回队列的方法)
将新消息“克隆”并将其放入队列中以便将其“失败”并返回队列会更好吗?
/** All of this is in a loop checking for messages in one session **/
//It's ok
if ( Handler.messageOK( pushMessage ) )
{
//Remove from queue
message.acknowledge();
}
//I know this isn't right but how put it back?
else
{
//Recover the message for retry
jmsSession.recover();
}