I traced this code quite recently because we needed to switch to using it for
one of our clients and also would have preferred specifying it on the consumer.
ClientSession in the core API exposes the windowSize as a parameter for
creating consumers, but the JMS shim ActiveMQSession does not.
The value cannot be changed on an existing session in either the Core or JMS
APIs, but the value in the session is only used as the default when creating
consumers.
The other option is to specify the <default-consumer-window-size> in
<address-settings> on the server to 0.
Note that there’s a small / nit bug. If the Client requests a
consumerWindowSize of exactly 1M and the server default value is set to
something other than 1M, the server’s value will be used instead of the clients.
That’s in ActiveMQSessionContext:
final int consumerWindowSize = windowSize ==
ActiveMQClient.DEFAULT_CONSUMER_WINDOW_SIZE ?
this.getDefaultConsumerWindowSize(queueInfo) : windowSize;
I haven’t brought it up before because I’m not sure it’s worth fixing.
From: Clebert Suconic <[email protected]>
Date: Friday, September 30, 2022 at 9:02 PM
To: [email protected] <[email protected]>
Subject: Re: Processing only one message
Internal property on the consumer I meant.
On Fri, Sep 30, 2022 at 9:01 PM Clebert Suconic
<[email protected]<mailto:[email protected]>> wrote:
I don’t think you can do that. That’s a property for the session afaik. If you
see an internal property with that name be careful as I’m not aware of any
tests.
On Fri, Sep 30, 2022 at 4:16 PM John Lilley
<[email protected]> wrote:
Clebert,
Thank for the reply! I can see how to see this for the connection by adding
this to the URL
?consumerWindowSize=0
https://activemq.apache.org/components/artemis/documentation/1.1.0/flow-control.html
I can also call setConsumerWindowSize(0) on the connection factory.
Can I set this explicitly on a consumer instance after it is created?
john
[rg]<https://www.redpointglobal.com/>
John Lilley
Chief Architect, Redpoint Global Inc.
888 Worcester Street, Suite 200 Wellesley, MA
02482<https://www.google.com/maps/search/888+Worcester+Street,+Suite+200+Wellesley,+MA+02482?entry=gmail&source=g>
M: +1 7209385761<tel:+1%207209385761> |
[email protected]<mailto:[email protected]>
From: Clebert Suconic
<[email protected]<mailto:[email protected]>>
Sent: Friday, September 30, 2022 3:02 AM
To: [email protected]<mailto:[email protected]>
Subject: Re: Processing only one message
*** [Caution] This email is from an external source. Please use caution
responding, opening attachments or clicking embedded links. ***
Look at slow consumers. Set consumer window size to 0 on this consumer.
On Thu, Sep 29, 2022 at 6:01 PM John Lilley
<[email protected]<mailto:[email protected]>>
wrote:
We have an application that should read a single message from a queue (a “job”
queue) and then stop processing more messages. Think of it as a “batch
request”. This is entirely using the JMS driver. Is there a good pattern for
this?
Under ActiveMQ 5, I call consumer.close(), session.close() from onMessage() and
that works fine. However, session.close() is not allowed under Artemis (and
maybe it was always wrong).
I’ve tried calling only consumer.close(), and leave the session open. But the
message is not ACked. Explicitly calling message.acknowledge() doesn’t work
either, because it gets to >>> and individualAck is false:
public void acknowledge() throws JMSException {
if (session != null) {
try {
if (session.isClosed()) {
throw ActiveMQClientMessageBundle.BUNDLE.sessionClosed();
}
>>> if (individualAck) {
message.individualAcknowledge();
}
Going back to the original question, what is the recommended pattern for this?
Thanks
john
Error! Filename not
specified.<https://linkprotect.cudasvc.com/url?a=https%3a%2f%2fwww.redpointglobal.com%2f&c=E,1,woI5c78_8f-DCJwnBAd2SB8ZQhLpa0H91b89ArK-kwPX0ToGxJQJmAWCo4pKKXorliMxDRxv9bVPLRhLdu50I9WBzrjdu8_-3xSL4nhKhbgAxC-hndfqanIBQp4,&typo=1>
John Lilley
Chief Architect, Redpoint Global Inc.
888 Worcester Street, Suite 200 Wellesley, MA
02482<https://www.google.com/maps/search/888+Worcester+Street,+Suite+200+Wellesley,+MA+02482?entry=gmail&source=g>
M: +1 7209385761<tel:+1%207209385761> |
[email protected]<mailto:[email protected]>
PLEASE NOTE: This e-mail from Redpoint Global Inc. (“Redpoint”) is confidential
and is intended solely for the use of the individual(s) to whom it is
addressed. If you believe you received this e-mail in error, please notify the
sender immediately, delete the e-mail from your computer and do not copy, print
or disclose it to anyone else. If you properly received this e-mail as a
customer, partner or vendor of Redpoint, you should maintain its contents in
confidence subject to the terms and conditions of your agreement(s) with
Redpoint.
--
Clebert Suconic
PLEASE NOTE: This e-mail from Redpoint Global Inc. (“Redpoint”) is confidential
and is intended solely for the use of the individual(s) to whom it is
addressed. If you believe you received this e-mail in error, please notify the
sender immediately, delete the e-mail from your computer and do not copy, print
or disclose it to anyone else. If you properly received this e-mail as a
customer, partner or vendor of Redpoint, you should maintain its contents in
confidence subject to the terms and conditions of your agreement(s) with
Redpoint.
--
Clebert Suconic
--
Clebert Suconic
[EXTERNAL]: This email originated from outside of Rave Mobile Safety. Do not
click links or open attachments unless you recognize the sender and know the
content is safe.