qpid-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Dale Green <green.dale1...@gmail.com>
Subject Re: Service Bus: unreceived messages stay locked (peek-and-lock)
Date Wed, 29 Jun 2016 10:08:10 GMT
Hi Robbie,

Thanks for the hints! I couldn't solve my problems, but let me leave some
more info, which can be useful for other people.

Closing the consumer explicitly didn't help (it's closed on session close
anyway). However, I have the feeling that the lifetime of the consumer does
not affect the peek lock (imagine a long-running consumer: it doesn't lock
the messages for longer than the lock duration).

Setting the prefetch value to 1 didn't help as the next message comes to
the consumer immediately after receive(). So, there could be 0 or 1 locked
messages after each consumer.

Setting the prefetch value to 0 brings me back to the drain problem:
Service Bus doesn't answer anything after the sent packet with 'drain=true'
, so receive() is blocked forever. However, there are some (probably empty)
AMQP packets sent after some time, but Qpid doesn't send anything anymore.


On Tue, Jun 28, 2016 at 6:34 PM, Robbie Gemmell <robbie.gemmell@gmail.com>
wrote:

> On 28 June 2016 at 17:00, Dale Green <green.dale1924@gmail.com> wrote:
> > Hi people,
> >
> > I have a problem using Qpid JMS 0.9 with Service Bus.
> >
> > The use case is the following:
> > I want to create a connection, session, and a queue consumer and receive
> 0
> > or 1 messages within a given timeout. That is, receive(timeout) is called
> > only once. Immediately after that, the session and the connection are
> > closed.
> >
> > The problem is:
> > The consumer may receive multiple messages during its lifetime (which the
> > client code doesn't even see, because receive is called only once). For
> > Service Bus, all this means peek-and-lock, so the messages that were sent
> > to the Qpid client are locked for the time set in the "Lock Duration"
> > property of the queue (default value is 30s/60s, Azure/Windows), and
> > therefore they are unavailable for other Qpid consumers for a certain
> > period of time. I would expect that something like the method Abandon()
> > from the C# API should happen on session close.
> >
> > So:
> > Is this a bug, feature, or I need to configure/call something in a
> > different way?
> >
> > Thanks!
>
> My guess is that ServiceBus is not taking the consumers implicit
> detachment when the session ends as reason to release the messages.
> Perhaps try explicitly closing the MessageConsumer (I'm taking your
> text above literally, such that you arent doing so currently) to see
> if that prods it into doing so?
>
> Another thing you could to help is if you know you want at most 1
> message is to only give 1 message credit at a time (setting the
> prefetch config to 1 or 0...though the earlier server issue you ran
> into around 'drain' behaviour may mean this doesnt work so well)
>
> Robbie
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@qpid.apache.org
> For additional commands, e-mail: users-help@qpid.apache.org
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message