qpid-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Robbie Gemmell <robbie.gemm...@gmail.com>
Subject Re: Qpid JMS 0.11.0 AMQP 1.0 client - Receiver issue with prefetch > 1
Date Thu, 10 May 2018 16:09:15 GMT
Meant to add, folks should use the users list for posts like this as thats
what its for, theres a bigger audience to answer things, and there isnt
dev-related traffic that can often drown out individual posts like this.

On 10 May 2018 at 16:54, Robbie Gemmell <robbie.gemmell@gmail.com> wrote:

> The issue is known in that it was discovered previously and resolved in
> the 0.23.0 release last year, via https://issues.apache.org/
> jira/browse/QPIDJMS-292. As you also seem to have identified, a
> workaround is setting the prefetch to 1 (or zero for newer clients). We
> dont have any plans for more 0.11.x releases.
>
> Robbie
>
>
> On 10 May 2018 at 15:05, Alessandro Crotti - SMC Consulting <
> a.crotti@smcconsulting.it> wrote:
>
>> Sorry, the version we are using is 0.11.1, not 0.11.0.
>>
>> Il 10/05/2018 15:41, Alessandro Crotti - SMC Consulting ha scritto:
>>
>> Hello,
>>
>> Using Qpid JMS 0.11.0 AMQP 1.0 client, which is the latest version for
>> Java 7, we experienced an issue when you set prefetch > 1 and start
>> consuming messages from a queue in asynchronous mode, using "onMessage()"
>> method and sessionMode = Session.CLIENT_ACKNOWLEDGE.
>>
>> Taking prefetch= 10 as example, I noticed that:
>>
>>    1. When you open connection/session/listener, the client sends a
>>    "flow" performative with linkCredit=10, which is correctly the prefetch
>>    value. Prefetched messages = 10
>>    2. The client starts to process the first message received using
>>    class "MessageDeliverTask" method "run()" (all inside
>>    JmsMessageConsumer.java)
>>    3. There is a call "ackFromReceive(envelope)" at row 667 which,
>>    following sub-calls, will call method "sendFlowIfNeeded()" of class
>>    "AmqpConsumer"
>>    4. in this method "newCredit" is calculated to send a new "flow"
>>    performative. Here the calculation doesn't check how many prefetched
>>    messages already are on client side. The currentCredit is 0, for this
>>    reason is sent a "flow" performative with linkCredit=10. Prefetched
>>    messages =20
>>    5. There is a call "messageListener.onMessage(copy);" at row 672
>>    which triggers the import of the message. Then the prefetched messages = 19.
>>    6. The process starts again from point 2 increasing constantly the
>>    prefetched messages collected on client side, causing timeout issues
>>    because if they are 1 million of messages, the client can't process them
>>    before they expire
>>
>> I compared code of method "sendFlowIfNeeded()" (see point 3) in version
>> 0.11.0 with the code of version 0.31.0: in version 0.31.0 the code is
>> changed and the calculation considers also "prefetchMessageCount".
>>
>> Is this a known issue? Will you fix it for 0.11.x version because it is
>> the latest version for Java 7?
>>
>> Best Regards
>> --
>> [image: SMC Consulting] <http://www.smcconsulting.it>
>>
>> [image: facebook]
>> <http://www.facebook.com/SMC-Consulting-Srl-597548223675024/>  [image:
>> linkeding] <http://www.linkedin.com/company/smc-consulting-srl> *Alessandro
>> Crotti*
>> Senior Developer
>>
>> tel:  +39 342 573 4450
>> skype:  crotti.alessandro
>>
>> *SMC Consulting* <http://www.smcconsulting.it>
>> Via dell'industria, 87 41012 Carpi (MO) - Italy
>> tel: +39 059 664875
>> CONFIDENTIALITY NOTICE: This message may contain confidential and/or
>> privileged information.
>> If you are not the intended recipient, please do not use its contents for
>> any purpose, advise
>> the sender immediately by reply e-mail and delete this message and any
>> attachments without retaining a copy.
>>
>>
>>
>

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