Neither the client-side minLargeMessage or broker-side amqpMinLargeMessage config will have much effect if you are only consuming from camel / JMS client, since as before they mainly influence publishing. The Artemis JMS client sends messages 'large' slightly differently, doing this when its minLargeMessage size is exceeded (it has a default of 100kb). The broker persists published AMQP messages differently as they arrive if they exceed the brokers amqpMinLargeMessageSize (and has a default of 100kb).
AMQP doesnt have distinct 'large' and 'not large' messages, thats why "minLargeMessage" config isnt/wont-be supported for Camel AMQP endpoints, since it is an Artemis client/protocol specific configuration, and not something the Qpid JMS client uses. Again I'd suggest you give a newer Camel a try, perhaps there have been bugs there which have been fixed. For example you are using 3.11 but I see in the upgrade details for the very next version that they changed the default behaviour so you have to explicitly enable the seperate artemis-specific 'special input/output-stream Object property' handling stuff (via artemisStreamingEnabled option), which I'd guess is exactly what is causing your problem due to Camel trying it with the non-artemis client. https://github.com/apache/camel/blob/26b156bc3d7c85bc629f2ca14f852bc16273f023/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide-3_12.adoc#camel-jms On Mon, 4 Sept 2023 at 16:27, Modanese, Riccardo <riccardo.modan...@eurotech.com.invalid> wrote: > > I was just wondering if there was a way to disable, or at least force > globally from server side, a value for that parameter. > I mean, the default value is in some way enforced by the broker if no > override is done. So, in the same way, I was wondering if this default > parameter could be changed without adding any parameter to acceptors or > connection strings (according to the journal buffer size, obviously, that > anyway could be changed by configuration right? - > <journal-buffer-size>my_value</journal-buffer-size>) > > I mentioned MQTT clients to give a picture of our configuration. > Our Artemis exposes 3 acceptors. 2 MQTT for IoT clients with 2 ways load > (each client publishes and subscribes different topics) and one AMQP for > consumers (Camel + streams configured) implementing business logic. > > The Camel routes steps have generic signature (Exchange, Object) and in the > full stack trace (I partially reported here) there wasn't any of our class > involved. (I know Object is redundant, but I preferred instead of getting it > from exchange.in in every method) > > With my original route configuration, I tried to set the amqpMinLargeMessage > and minLargeMessage to both the acceptor and the connection string on client > side but without any effect. > > I already received support from Camel mailing list and they suggested me to > switch to Camel-jms since Camel-amqp doesn’t support the minLargeMessage > (though in my tests I was able to get the stream from Artemis once I switched > to use core instead of amqp) > > I’m looking forward to see the minLargeMessage supported by Camel streams > also with amqp endpoint. > > From: Robbie Gemmell <robbie.gemm...@gmail.com> > Date: Monday, 4 September 2023 at 14:11 > To: users@activemq.apache.org <users@activemq.apache.org> > Subject: Re: Disable large messages support at all > Though actually, another thing occurred to me...you said your "clients > are MQTT", in which case the Artemis client minLargeMessageSize config > and broker side amqpMinLargeMessageSize config wont necessarily be in > play if your Camel bits are only consuming messages, as those configs > primarily affect what happens when the Core and AMQP clients are > producing messages. Its not really clear so far what all you are doing > at each component. > > On Mon, 4 Sept 2023 at 12:34, Robbie Gemmell <robbie.gemm...@gmail.com> wrote: > > > > The Artemis broker / client handling of 'large' messages, and > > 'streaming payload to/from file at client' are 2 separate things and > > shouldnt be conflated. > > > > The Artemis 'Core' JMS client + broker consider messages over 100kb by > > default 'large' and treat them a little differently in terms of how > > they are sent by the producer client, and then the broker storing them > > differently on disk, and sending them to consuming clients. > > > > The Artemis client can separately leverage a custom Object property to > > read/write the BytesMessage body using an InputStream / OutputStream, > > e.g to from/to a file, at the application side. > > > > The exception below seems (not 100% clear, as the stack isnt present) > > to be saying that while trying to extract the body of a message Camel > > actually tried to write to a read-only JMS Message (specifically the > > properties of it), and so the qpid-jms client threw because of that, > > as it should. That seems like potentially either an issue with your > > configuration or a bug in Camel. Guessing, is it possible you/Camel > > perhaps configuring things to try inserting the custom 'input/output > > stream' Object property used by the Artemis JMS client, even though it > > isnt actually using the Artemis client? That certainly might explain > > the seeming 'set property while trying to extract body from read-only > > message' behaviour. As you are asking here to 'disable large messages' > > entirely, it sounds like your messages aren't necessarily all that big > > and you dont necessarily need/want the 'stream message to/from file' > > input/output stream behaviour at the client side anyway, and if so you > > can disable that? > > > > I see you mentioned Camel 3.11. That's pretty old now, perhaps also > > try a more recent version to see if it fixed anything that might be in > > play here? > > > > There is a second broker-side acceptor URL config parameter, > > amqpMinLargeMessageSize, that defaults to 102400 (100kb) and can > > change the point at which the broker considers AMQP messages to be > > 'large' and handles them on disk in similar way as it does the Artemis > > Core 'large' messages. Though there are also other considerations > > though as Justin said, such as the journal buffer size and file size, > > so its not a case of just setting it really large to disable the > > behaviour entirely. > > > > On Mon, 4 Sept 2023 at 08:32, Modanese, Riccardo > > <riccardo.modan...@eurotech.com.invalid> wrote: > > > > > > Hi Justin, > > > Thank you for your reply. > > > I had no way to get large messages support using Camel routes with > > > Camel-amqp endpoint. > > > With Camel-amqp, using qpid connection > > > (org.apache.qpid.jms.JmsConnectionFactory), messages over the default > > > 100kb weren’t processed. > > > Camel went to an infinite loop printing this error at each iteration: > > > > > > 2023-08-23 11:07:18 org.apache.camel.RuntimeCamelException: Failed to > > > extract body due to: javax.jms.MessageNotWriteableException: Message > > > properties are read-only. Message: JmsBytesMessage { > > > org.apache.qpid.jms.provider.amqp.message.AmqpJmsBytesMessageFacade@39dd152c<mailto:org.apache.qpid.jms.provider.amqp.message.AmqpJmsBytesMessageFacade@39dd152c> > > > } > > > 2023-08-23 11:07:18 at > > > org.apache.camel.component.jms.JmsBinding.extractBodyFromJms(JmsBinding.java:174) > > > 2023-08-23 11:07:18 at > > > org.apache.camel.component.jms.JmsMessage.createBody(JmsMessage.java:234) > > > > > > Switching to core the messages over 100k were handled but no way to > > > change the minimum large messages default value. > > > > > > From the support I got from Camel mailing list there is no other way than > > > using Camel-jms to have full large messages support: > > > > > > “I am afraid that in order to use minLargeMessageSize you need to use > > > *camel-jms* component and *artemis-jms-client* as jms implementation, > > > because camel-amqp uses *qpid-jms-client.*If you have some time, you can > > > take a look to camel-jms” > > > > > > This force us to use the Artemis connection factory > > > (org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory), in > > > our clients, to connect to the broker, decreasing the generality we like > > > to have on our opensource project. > > > > > > I’m still testing a working configuration with Camel-jms but I was just > > > wondering if there was a way to disable the large messages support. > > > > > > Riccardo > > > > > > From: Justin Bertram <jbert...@apache.org> > > > Date: Friday, 1 September 2023 at 20:56 > > > To: users@activemq.apache.org <users@activemq.apache.org> > > > Subject: Re: Disable large messages support at all > > > There is no way to completely disable large message support. This is > > > because clients are free to send messages larger than the configured > > > journal-buffer-size (490KB by default). When that happens the broker has > > > no > > > choice but to treat the message as "large" and stream it to disk rather > > > than storing it in the journal. You can increase the journal-buffer-size > > > to > > > make large messages less likely or even effectively eliminate them > > > depending on your use-case, but using the larger buffer may have an impact > > > on performance. > > > > > > What "difficulties" are you having currently with AMQP, MQTT, & large > > > messages? > > > > > > > > > Justin > > > > > > > > > On Wed, Aug 30, 2023 at 2:21 AM Modanese, Riccardo > > > <riccardo.modan...@eurotech.com.invalid> wrote: > > > > > > > Hello to everyone, > > > > > > > > I’m trying to configure my Camel routes (3.11) with Artemis (2.28.0) > > > > large messages but I’m still experiencing some difficulties. > > > > My clients are MQTT and my Camel routes are using AMQP endpoint. > > > > Is there a way to completely disable large message support on Artemis or > > > > to set the min value globally on Artemis to override any setting made on > > > > connectors bases? > > > > > > > > Regards, > > > > > > > > Riccardo Modanese > > > > > > > >