You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by zizou77 <pa...@laposte.net> on 2006/11/23 10:10:57 UTC

QueueBrowser acknowledge

Hi,

I use a queueBrowser with a selector in my program. So I get some Message.
But when I use message's acknowledge method, messages are still in the
queue. Why?
I use Session.CLIENT_ACKNOWLEDGE, but i've got the same problem with
Session.AUTO_ACKNOWLEDGE.

This a part of my program:

 public void run() {
        ActiveMQConnectionFactory factory = new
ActiveMQConnectionFactory(broker);

        try {
            QueueConnection connexion = factory.createQueueConnection();
            connexion.start();
            QueueSession session = connexion.createQueueSession(false,
Session.CLIENT_ACKNOWLEDGE);
            Queue groupMsgQueueReceiver = session.createQueue(queueIn);
            QueueReceiver queueReceiver =
session.createReceiver(groupMsgQueueReceiver);
            Queue groupMsgQueueSender = session.createQueue(queueOut);
            QueueSender queueSender =
session.createSender(groupMsgQueueSender);
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }

//lookForGroupDocuments is a method started by a job scheduler quartz
 private void lookForGroupDocuments()
    {

      QueueBrowser queueBrowser = session.createBrowser(queue, selector);
      Enumeration enumeration;
      List<Message> messageDocumentsList = new ArrayList();
      enumeration = queueBrowser.getEnumeration();
      while (enumeration.hasMoreElements()) {
            Message message = (Message) enumeration.nextElement();
            messageDocumentsList.add(message);
       }
          
........

then i do:

for (int i = 0; i < messageDocumentsList.size(); i++) {
       messageDocumentsList.get(i).acknowledge();
}

-- 
View this message in context: http://www.nabble.com/QueueBrowser-acknowledge-tf2689843.html#a7500849
Sent from the ActiveMQ - User mailing list archive at Nabble.com.


Re: QueueBrowser acknowledge

Posted by zizou77 <pa...@laposte.net>.
yes the queueReceiver is different to the sender's queue, but it's not a
problem, no? After acknowledge I send a new Message to sender's queue.
I don't understand your question: "are the queues still there when you use
an actual consumer?"


Marlon Santos wrote:
> 
> 
> Hi, 
> Based on your code, it seems that the queue that you use for the receiver
> is different to the sender's queue. So they have different queues. And it
> seems that you didnt actually sent a message, or an actual
> acknowledgement. Also, are the queues still there when you use an actual
> consumer?
> 
> 
> zizou77 wrote:
>> 
>> Hi,
>> 
>> I use a queueBrowser with a selector in my program. So I get some
>> Message. But when I use message's acknowledge method, messages are still
>> in the queue. Why?
>> I use Session.CLIENT_ACKNOWLEDGE, but i've got the same problem with
>> Session.AUTO_ACKNOWLEDGE.
>> 
>> This a part of my program:
>> 
>>  public void run() {
>>         ActiveMQConnectionFactory factory = new
>> ActiveMQConnectionFactory(broker);
>> 
>>         try {
>>             QueueConnection connexion = factory.createQueueConnection();
>>             connexion.start();
>>             QueueSession session = connexion.createQueueSession(false,
>> Session.CLIENT_ACKNOWLEDGE);
>>             Queue groupMsgQueueReceiver = session.createQueue(queueIn);
>>             QueueReceiver queueReceiver =
>> session.createReceiver(groupMsgQueueReceiver);
>>             Queue groupMsgQueueSender = session.createQueue(queueOut);
>>             QueueSender queueSender =
>> session.createSender(groupMsgQueueSender);
>>         } catch (JMSException e) {
>>             e.printStackTrace();
>>         }
>>     }
>> 
>> //lookForGroupDocuments is a method started by a job scheduler quartz
>>  private void lookForGroupDocuments()
>>     {
>> 
>>       QueueBrowser queueBrowser = session.createBrowser(queue, selector);
>>       Enumeration enumeration;
>>       List<Message> messageDocumentsList = new ArrayList();
>>       enumeration = queueBrowser.getEnumeration();
>>       while (enumeration.hasMoreElements()) {
>>             Message message = (Message) enumeration.nextElement();
>>             messageDocumentsList.add(message);
>>        }
>>           
>> ........
>> 
>> then i do:
>> 
>> for (int i = 0; i < messageDocumentsList.size(); i++) {
>>        messageDocumentsList.get(i).acknowledge();
>> }
>> 
>> 
> 
> 

-- 
View this message in context: http://www.nabble.com/QueueBrowser-acknowledge-tf2689843.html#a7506728
Sent from the ActiveMQ - User mailing list archive at Nabble.com.


Re: QueueBrowser acknowledge

Posted by Marlon Santos <ms...@exist.com>.

Hi, 
Based on your code, it seems that the queue that you use for the receiver is
different to the sender's queue. So they have different queues. And it seems
that you didnt actually sent a message, or an actual acknowledgement. Also,
are the queues still there when you use an actual consumer?


zizou77 wrote:
> 
> Hi,
> 
> I use a queueBrowser with a selector in my program. So I get some Message.
> But when I use message's acknowledge method, messages are still in the
> queue. Why?
> I use Session.CLIENT_ACKNOWLEDGE, but i've got the same problem with
> Session.AUTO_ACKNOWLEDGE.
> 
> This a part of my program:
> 
>  public void run() {
>         ActiveMQConnectionFactory factory = new
> ActiveMQConnectionFactory(broker);
> 
>         try {
>             QueueConnection connexion = factory.createQueueConnection();
>             connexion.start();
>             QueueSession session = connexion.createQueueSession(false,
> Session.CLIENT_ACKNOWLEDGE);
>             Queue groupMsgQueueReceiver = session.createQueue(queueIn);
>             QueueReceiver queueReceiver =
> session.createReceiver(groupMsgQueueReceiver);
>             Queue groupMsgQueueSender = session.createQueue(queueOut);
>             QueueSender queueSender =
> session.createSender(groupMsgQueueSender);
>         } catch (JMSException e) {
>             e.printStackTrace();
>         }
>     }
> 
> //lookForGroupDocuments is a method started by a job scheduler quartz
>  private void lookForGroupDocuments()
>     {
> 
>       QueueBrowser queueBrowser = session.createBrowser(queue, selector);
>       Enumeration enumeration;
>       List<Message> messageDocumentsList = new ArrayList();
>       enumeration = queueBrowser.getEnumeration();
>       while (enumeration.hasMoreElements()) {
>             Message message = (Message) enumeration.nextElement();
>             messageDocumentsList.add(message);
>        }
>           
> ........
> 
> then i do:
> 
> for (int i = 0; i < messageDocumentsList.size(); i++) {
>        messageDocumentsList.get(i).acknowledge();
> }
> 
> 

-- 
View this message in context: http://www.nabble.com/QueueBrowser-acknowledge-tf2689843.html#a7506647
Sent from the ActiveMQ - User mailing list archive at Nabble.com.


Re: QueueBrowser acknowledge

Posted by Adrian Co <ac...@exist.com>.
Maybe using a selector is a better alternative. This approach seems 
inefficient as you are receiving over the network all messages in the 
queue, and you are receiving them twice, even though you only need some 
of the messages.


zizou77 wrote:
> thanks,
>
> I resolved my problem with this:
>
>             Message receiverMsg;
>             for (int i = 0; i < msgList.size(); i++) {
>                 // I delete messages that I select by queueBrowser
>                 receiverMsg =
> groupMsgQueueManager.getQueueReceiver().receive();
>                 if
> (receiverMsg.getJMSMessageID().equals(msgList.get(i).getJMSMessageID())){
>                     receiverMsg.acknowledge();
>                 }
>             }
>
>
>
>
> Adrian Co wrote:
>   
>> Hi,
>>
>> I don't think you can remove a message from a queue using a queue 
>> browser. You'd generally use a queue receiver for that.
>>
>> zizou77 wrote:
>>     
>>> Hi,
>>>
>>> I use a queueBrowser with a selector in my program. So I get some
>>> Message.
>>> But when I use message's acknowledge method, messages are still in the
>>> queue. Why?
>>> I use Session.CLIENT_ACKNOWLEDGE, but i've got the same problem with
>>> Session.AUTO_ACKNOWLEDGE.
>>>
>>> This a part of my program:
>>>
>>>  public void run() {
>>>         ActiveMQConnectionFactory factory = new
>>> ActiveMQConnectionFactory(broker);
>>>
>>>         try {
>>>             QueueConnection connexion = factory.createQueueConnection();
>>>             connexion.start();
>>>             QueueSession session = connexion.createQueueSession(false,
>>> Session.CLIENT_ACKNOWLEDGE);
>>>             Queue groupMsgQueueReceiver = session.createQueue(queueIn);
>>>             QueueReceiver queueReceiver =
>>> session.createReceiver(groupMsgQueueReceiver);
>>>             Queue groupMsgQueueSender = session.createQueue(queueOut);
>>>             QueueSender queueSender =
>>> session.createSender(groupMsgQueueSender);
>>>         } catch (JMSException e) {
>>>             e.printStackTrace();
>>>         }
>>>     }
>>>
>>> //lookForGroupDocuments is a method started by a job scheduler quartz
>>>  private void lookForGroupDocuments()
>>>     {
>>>
>>>       QueueBrowser queueBrowser = session.createBrowser(queue, selector);
>>>       Enumeration enumeration;
>>>       List<Message> messageDocumentsList = new ArrayList();
>>>       enumeration = queueBrowser.getEnumeration();
>>>       while (enumeration.hasMoreElements()) {
>>>             Message message = (Message) enumeration.nextElement();
>>>             messageDocumentsList.add(message);
>>>        }
>>>           
>>> ........
>>>
>>> then i do:
>>>
>>> for (int i = 0; i < messageDocumentsList.size(); i++) {
>>>        messageDocumentsList.get(i).acknowledge();
>>> }
>>>
>>>   
>>>       
>>
>>     
>
>   


Re: QueueBrowser acknowledge

Posted by zizou77 <pa...@laposte.net>.
thanks,

I resolved my problem with this:

            Message receiverMsg;
            for (int i = 0; i < msgList.size(); i++) {
                // I delete messages that I select by queueBrowser
                receiverMsg =
groupMsgQueueManager.getQueueReceiver().receive();
                if
(receiverMsg.getJMSMessageID().equals(msgList.get(i).getJMSMessageID())){
                    receiverMsg.acknowledge();
                }
            }




Adrian Co wrote:
> 
> Hi,
> 
> I don't think you can remove a message from a queue using a queue 
> browser. You'd generally use a queue receiver for that.
> 
> zizou77 wrote:
>> Hi,
>>
>> I use a queueBrowser with a selector in my program. So I get some
>> Message.
>> But when I use message's acknowledge method, messages are still in the
>> queue. Why?
>> I use Session.CLIENT_ACKNOWLEDGE, but i've got the same problem with
>> Session.AUTO_ACKNOWLEDGE.
>>
>> This a part of my program:
>>
>>  public void run() {
>>         ActiveMQConnectionFactory factory = new
>> ActiveMQConnectionFactory(broker);
>>
>>         try {
>>             QueueConnection connexion = factory.createQueueConnection();
>>             connexion.start();
>>             QueueSession session = connexion.createQueueSession(false,
>> Session.CLIENT_ACKNOWLEDGE);
>>             Queue groupMsgQueueReceiver = session.createQueue(queueIn);
>>             QueueReceiver queueReceiver =
>> session.createReceiver(groupMsgQueueReceiver);
>>             Queue groupMsgQueueSender = session.createQueue(queueOut);
>>             QueueSender queueSender =
>> session.createSender(groupMsgQueueSender);
>>         } catch (JMSException e) {
>>             e.printStackTrace();
>>         }
>>     }
>>
>> //lookForGroupDocuments is a method started by a job scheduler quartz
>>  private void lookForGroupDocuments()
>>     {
>>
>>       QueueBrowser queueBrowser = session.createBrowser(queue, selector);
>>       Enumeration enumeration;
>>       List<Message> messageDocumentsList = new ArrayList();
>>       enumeration = queueBrowser.getEnumeration();
>>       while (enumeration.hasMoreElements()) {
>>             Message message = (Message) enumeration.nextElement();
>>             messageDocumentsList.add(message);
>>        }
>>           
>> ........
>>
>> then i do:
>>
>> for (int i = 0; i < messageDocumentsList.size(); i++) {
>>        messageDocumentsList.get(i).acknowledge();
>> }
>>
>>   
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/QueueBrowser-acknowledge-tf2689843.html#a7519967
Sent from the ActiveMQ - User mailing list archive at Nabble.com.


Re: QueueBrowser acknowledge

Posted by Adrian Co <ac...@exist.com>.
Hi,

I don't think you can remove a message from a queue using a queue 
browser. You'd generally use a queue receiver for that.

zizou77 wrote:
> Hi,
>
> I use a queueBrowser with a selector in my program. So I get some Message.
> But when I use message's acknowledge method, messages are still in the
> queue. Why?
> I use Session.CLIENT_ACKNOWLEDGE, but i've got the same problem with
> Session.AUTO_ACKNOWLEDGE.
>
> This a part of my program:
>
>  public void run() {
>         ActiveMQConnectionFactory factory = new
> ActiveMQConnectionFactory(broker);
>
>         try {
>             QueueConnection connexion = factory.createQueueConnection();
>             connexion.start();
>             QueueSession session = connexion.createQueueSession(false,
> Session.CLIENT_ACKNOWLEDGE);
>             Queue groupMsgQueueReceiver = session.createQueue(queueIn);
>             QueueReceiver queueReceiver =
> session.createReceiver(groupMsgQueueReceiver);
>             Queue groupMsgQueueSender = session.createQueue(queueOut);
>             QueueSender queueSender =
> session.createSender(groupMsgQueueSender);
>         } catch (JMSException e) {
>             e.printStackTrace();
>         }
>     }
>
> //lookForGroupDocuments is a method started by a job scheduler quartz
>  private void lookForGroupDocuments()
>     {
>
>       QueueBrowser queueBrowser = session.createBrowser(queue, selector);
>       Enumeration enumeration;
>       List<Message> messageDocumentsList = new ArrayList();
>       enumeration = queueBrowser.getEnumeration();
>       while (enumeration.hasMoreElements()) {
>             Message message = (Message) enumeration.nextElement();
>             messageDocumentsList.add(message);
>        }
>           
> ........
>
> then i do:
>
> for (int i = 0; i < messageDocumentsList.size(); i++) {
>        messageDocumentsList.get(i).acknowledge();
> }
>
>