I think setting "JMSExpiration" from a header isn't supported. Only these four:
CamelJMSDestinationName (producer) CamelJmsRequestTimeout (producer) JMSCorrelationID (producer) JMSReplyTo (producer) Don't know why, but other ones have no effect. The component does some message mapping though, because when I don't put long in the value it says: "org.apache.camel.TypeConversionException: Error during type conversion from type: java.lang.String to the required type: java.lang.Long with value blabla due to java.lang.NumberFormatException: For input string: "blabla" When I provide a number I don't see it on the broker. I tried it with another client (non-camel) and then the JMSExperiation is set as expected. Regards, Raymond On Mon, Apr 3, 2023 at 1:32 PM Ephemeris Lappis <ephemeris.lap...@gmail.com> wrote: > No, I can't : we work on a Red-Hat Fuse cluster, and the brokers and > the related configured components are provided by the cluster (in > groups including Karaf instances), and are shared for all our business > bundles and their queues. We'd want to set time to live (expiration) > only for some queues, not all the queues that are managed by the same > broker group. > > That's why I need to set this time to live using headers only for some > messages sent to some queues... > > Thanks. > > Le lun. 3 avr. 2023 à 13:08, ski n <raymondmees...@gmail.com> a écrit : > > > > Can you set the parameter globally like this: > > > > ActiveMQComponent activeMQComponent = new ActiveMQComponent(); > > activeMQComponent.setPreserveMessageQos(true); > > context.addComponent("activemq2",activeMQComponent); > > > > > > On Mon, Apr 3, 2023 at 12:27 PM Ephemeris Lappis < > ephemeris.lap...@gmail.com> > > wrote: > > > > > Hello. > > > > > > In fact I think I'd only need to set one header for expiration time. > > > Something like that : > > > > > > <setHeader name="JMSExpiration"> > > > <simple>${date:now+30m}</simple> > > > </setHeader> > > > <to uri="jms:queue:fifi1?connectionFactory=#myJMS" /> > > > > > > But it seems that for overriding the default JMSExpiration another > > > change must be done on the endpoint (otherwise the JMSExpiration is > > > not set before the message is sent) : > > > > > > <to > > > > uri="jms:queue:fifi1?connectionFactory=#myJMS&preserveMessageQos=true" > > > /> > > > > > > So, is there any way to add the "preserveMessageQos=true" indication > > > using a header, since I can't modify the endpoint URI ? > > > > > > Thanks again. > > > > > > Regards. > > > > > > Le lun. 3 avr. 2023 à 09:43, ski n <raymondmees...@gmail.com> a écrit > : > > > > > > > > I should be possible as Camel Headers are translated to JMS Headers > when > > > > sending to an ActiveMQ queue or topic. This can be tricky though as > > > > sometimes JMS Headers are not set by the client but by the broker > (for > > > > example JMSTimestamp), so you can't use all headers. > > > > > > > > You can check this page with the possibilities: > > > > > > > > https://activemq.apache.org/activemq-message-properties > > > > > > > > Another thing is that values you need to give are not always very > logical > > > > for example JMSDeliveryMode. According to the Java EE documentation: > > > > > > > > "The delivery modes supported by the JMS API are *PERSISTENT and > > > > NON_PERSISTENT* . A client marks a message as persistent if it feels > that > > > > the application will have problems if the message is lost in > transit. A > > > > client marks a message as non-persistent if an occasional lost > message is > > > > tolerable." > > > > > > > > As there are only two modes, you made expect that its a boolean > value. > > > > However it's int (as also noted on the ActiveMQ documentation page). > Then > > > > you may think the values used are 0 and 1. It's however 1 > > > (NON-PERSISTENT) > > > > and 2 (PERSISTENT). Mostly in code static values are used, but when > > > sending > > > > headers as text, these are things to consider. > > > > > > > > Kind regards, > > > > > > > > Raymond > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Mon, Apr 3, 2023 at 8:47 AM Ephemeris Lappis < > > > ephemeris.lap...@gmail.com> > > > > wrote: > > > > > > > > > Hello. > > > > > > > > > > Thanks for your idea. I had a look at the JMs component unit tests, > > > > > but I've not found any that use only headers to set messages time > to > > > > > live. > > > > > Could you please give us some example ? > > > > > > > > > > Thanks again. Regards > > > > > > > > > > Le ven. 31 mars 2023 à 18:34, Claus Ibsen <claus.ib...@gmail.com> > a > > > écrit > > > > > : > > > > > > > > > > > > A good idea is to look at the unit tests in the camel components > > > > > > > > > > > > On Fri, Mar 31, 2023 at 6:27 PM Ephemeris Lappis < > > > > > ephemeris.lap...@gmail.com> > > > > > > wrote: > > > > > > > > > > > > > Hello. > > > > > > > > > > > > > > I've not found any way to set messages time to live when > sending > > > to a > > > > > > > JMS (activemq) queue. > > > > > > > > > > > > > > I'd like to set headers only, without changing the endpoint > URI. > > > Is it > > > > > > > possible ? > > > > > > > I've read (and tested it too) that if a message header is set > for > > > the > > > > > > > JMSExpiration, it's not taken into account if the option > > > > > > > "preserveMessageQos" is not added into the URI. So, is there > any > > > other > > > > > > > way using other headers ? > > > > > > > > > > > > > > Thanks for your help. > > > > > > > > > > > > > > Regards. > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > Claus Ibsen > > > > > > ----------------- > > > > > > @davsclaus > > > > > > Camel in Action 2: https://www.manning.com/ibsen2 > > > > > > > > >