如何才能在消费者的JMS中仅确认一条消息?

时间:2017-06-21 01:08:43

标签: java java-ee jms

我有一个消费者检查队列中的消息,然后尝试根据消息进行一些处理。如果出现问题,它应该将消息留在队列中,否则它应该确认收到并从队列中删除它。

阅读文档时,似乎在单个邮件上使用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();
}

0 个答案:

没有答案