qpid-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Gordon Sim (JIRA)" <qpid-...@incubator.apache.org>
Subject [jira] Commented: (QPID-1642) JMS ReceiveNowait does not return a message even if the queue is not empty
Date Wed, 11 Feb 2009 11:18:59 GMT

    [ https://issues.apache.org/jira/browse/QPID-1642?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12672599#action_12672599
] 

Gordon Sim commented on QPID-1642:
----------------------------------

Question: is the issue that the send in step (2) is asynchronous (i.e. the return from the
send method does not imply the message is enqueued)? 

> JMS ReceiveNowait does not return a message even if the queue is not empty
> --------------------------------------------------------------------------
>
>                 Key: QPID-1642
>                 URL: https://issues.apache.org/jira/browse/QPID-1642
>             Project: Qpid
>          Issue Type: Bug
>          Components: Java Client
>    Affects Versions: M4
>            Reporter: Arnaud Simon
>            Assignee: Rafael H. Schloming
>             Fix For: M5
>
>
> Description:
> The first invocation of receiveNoWait does not return a message even if the queue is
full. 
> How to replicate:
> 1) create a queue 
> 2) send a message 
> 3) try to consume this message using receiveNoWait 
> ==> we get null even if there is a message seating in the queue 
> Solution:
> When a JMS consumer first invokes receiveNowait then BasicMessageConsumer_0_10 request
for more credits and then poll the _synchronousQueue. This does not leave enough time for
the message to be enqueued. 
> One solution would be to query the queue size before allowing the credits: Something
like that would work: 
> public Object getMessageFromQueue(long l) throws InterruptedException
>     {
>         long size = 0;
>         if(l < 0)
>         {
>                size =  _0_10session.requestQueueDepth(getDestination()) ;
>         }
>         if (isStrated() && ! getSession().prefetch() && _synchronousQueue.isEmpty())
>         {
>             _0_10session.getQpidSession().messageFlow(getConsumerTagString(),
>                                                       MessageCreditUnit.MESSAGE, 1);
>         }
>         if (! getSession().prefetch())
>         {
>             _syncReceive.set(true);
>         }
>         Object o;// = super.getMessageFromQueue(l);
>         if (l > 0)
>          {
>              o = _synchronousQueue.poll(l, TimeUnit.MILLISECONDS);
>          }
>          else if (l < 0)
>          {           
>               if(size <= 0 )
>               {
>                  o = _synchronousQueue.poll();
>               }
>               else
>               {
>                  o = _synchronousQueue.take();
>               }
>          }
>          else
>          {
>              o = _synchronousQueue.take();
>          }
>         if (! getSession().prefetch())
>         {
>             _syncReceive.set(false);
>         }
>         return o;
>     }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:dev-subscribe@qpid.apache.org


Mime
View raw message