On 29 June 2016 at 11:08, Dale Green <green.dale1...@gmail.com> wrote:
> 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).
>

After sending my last reply to Gordon, I noticed something in your
wording that I'd now like to double check. When I asked if you tried
closing the consumer explicitly I meant before closing the session
object, i.e:
consumer.close();
session.close();

Can you confirm that is what you updated your code to do?

> 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.gemm...@gmail.com>
> wrote:
>
>> On 28 June 2016 at 17:00, Dale Green <green.dale1...@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-unsubscr...@qpid.apache.org
>> For additional commands, e-mail: users-h...@qpid.apache.org
>>
>>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@qpid.apache.org
For additional commands, e-mail: users-h...@qpid.apache.org

Reply via email to