Hi, let me explain a similar use case what we would use to show that there is a demand for modification of application properties:
We would like to enrich an AMQP message with additional application properties for better filtering and message routing. As far as I understood from the discussion below this is not possible by calling message.putStringProperty("new_prop", "new_prop_value") I tried to do this in an AmqpInterceptor but the listener still gets the original message without this added property. And therefore the listener can also not create a message selector based on the new application properties. I also checked the spec and I could not find a reference that application properties are immutable. For "pure" properties this seems to be true according to section 3.2.4 of the spec. The only way I can think of is to use a listener which creates a new message with the enriched context and uploads it back to the broker. This would duplicate a lot of messages and would impact performance. A more efficient way to realize this feature would be greatly appreciated. Best regards, Matthias P.S.: I just subscribed to this mailing list so I was not able to reply directly to the mail below. Sorry about that. ---------- Weitergeleitete Nachricht ---------- > From: Clebert Suconic <clebert.suco...@gmail.com> > To: users@activemq.apache.org > Cc: > Bcc: > Date: Tue, 10 Oct 2017 20:18:38 -0400 > Subject: Re: How to put "properties" on a message so they are accessible > later > We could add a new method call to the plugin... something like > replaceMessage. > > With that on hand you could then convert the AMQPMessage to a Core > Message using message.toCore().. and return the transformed message. > > > The message wouldn't be an AMQP message any longer from that point > on.. it would eventually be converted back to whatever other message > protocols it leads on the other side... it would of course have some > performance impact but it would work. > > On Tue, Oct 10, 2017 at 5:55 PM, Timothy Bish <tabish...@gmail.com> wrote: > > On 10/10/2017 05:20 PM, Harrison Tarr wrote: > >> > >> Thanks for the quick reply. Is there any way to change something on the > >> message that my consumer could then access? Maybe not > ApplicationProperties > >> but something else? > > > > > > Nothing that would be accessible via the JMS client API. > > > > > >> Harrison > >> > >> -----Original Message----- > >> From: Timothy Bish [mailto:tabish...@gmail.com] > >> Sent: Tuesday, October 10, 2017 2:11 PM > >> To: users@activemq.apache.org > >> Subject: Re: How to put "properties" on a message so they are accessible > >> later > >> > >> On 10/10/2017 05:06 PM, Harrison Tarr wrote: > >>> > >>> Hello again, > >>> > >>> I wanted to follow up on this as I've done some more experimenting. > >>> I've found that when I use the Core protocol or Openwire protocol, > >>> everything works as expected. I am able to use the "setStringProperty" > >>> in my ActiveMQServerPlugin and it adds a header that I can then access > >>> in my Camel consumer code. However, if I try to add a property to a > >>> message that was sent using the AMQP protocol, it does not stay set on > >>> the message. It appears to me that this is because the AMQP message is > >>> more protected? Maybe it has all of the data in an immutable > >>> ByteBuffer? I've tried using the "reencode" method on the > >>> org.apache.activemq.artemis.protocol.amqp.broker.AMQPMessage class, > >>> but it causes an error; it can't parse the message back out, it says > >>> something about an unknown constructor. (Being handled here > >>> https://github.com/apache/qpid-jms/blob/master/qpid-jms-client/src/mai > >>> n/java/org/apache/qpid/jms/provider/amqp/AmqpConsumer.java#L496) > >> > >> AMQP ApplicationProperties are immutable so you cannot change or add to > >> them in flight, that would violate the AMQP specification. > >> > >>> Justin, I've looked at the remoting interceptors. I think I decided > >>> against using them because it does not expose as much information to > me as I > >>> wanted. I'm specifically trying to take the authentication credentials > and > >>> then create some kind of authentication token to attach to the message > that > >>> I can then use in my consuming code. > >>> > >>> Regards, > >>> Harrison Tarr > >>> > >>> > >>> -----Original Message----- > >>> From: Justin Bertram [mailto:jbert...@redhat.com] > >>> Sent: Tuesday, September 12, 2017 3:28 PM > >>> To: users@activemq.apache.org > >>> Subject: Re: How to put "properties" on a message so they are > >>> accessible later > >>> > >>> I'm not terribly familiar with the ActiveMQServerPlugin functionality > in > >>> this regard, but I do know that you can make such modifications to > messages > >>> using remoting interceptors. Have you explored that possibility? > >>> > >>> > >>> Justin > >>> > >>> On Tue, Sep 12, 2017 at 3:45 PM, Harrison Tarr > >>> <harrison.t...@connexta.com> > >>> wrote: > >>> > >>>> Right now I'm using Artemis 2.2.0. > >>>> I've done a bit more research and experimentation. It seems that I > >>>> can set a header in Camel, send the message to a queue/topic hosted > >>>> on Artemis and read the header as a "stringProperty". The header keys > >>>> also show up when I do a "getProperties" call. However, if I try to > >>>> overwrite that field in my ActiveMQServerPlugin (specifically the > >>>> beforeSend call), the change is not propagated to Camel. IE, if I > send a > >>>> message with the header "testHeader" > >>>> with a value of "testValue", I can see, in Artemis, "testHeader" as a > >>>> property on the message with the value of "testValue". If I then try > >>>> to overwrite that value with "newValue", when I access the message > >>>> and its headers in the consumer, the header is still "testHeader" > >>>> with the value of "testValue", whereas I expect it to be "testHeader" > >>>> with a value of "newValue". > >>>> > >>>> Harrison Tarr > >>>> > >>>> -----Original Message----- > >>>> From: tbai...@gmail.com [mailto:tbai...@gmail.com] On Behalf Of Tim > >>>> Bain > >>>> Sent: Monday, September 11, 2017 6:26 PM > >>>> To: ActiveMQ Users <users@activemq.apache.org> > >>>> Subject: RE: How to put "properties" on a message so they are > >>>> accessible later > >>>> > >>>> To be clear, you're asking about doing this in Artemis, not ActiveMQ > >>>> 5.x, right? What version of Artemis? > >>>> > >>>> On Sep 11, 2017 2:48 PM, "Harrison Tarr" <harrison.t...@connexta.com> > >>>> wrote: > >>>> > >>>>> I just wanted to follow up: Does anyone know how to put an > >>>>> attribute/property on a message in an ActiveMQServerPlugin that I > >>>>> can then pull out of the message in Camel? > >>>>> > >>>>> Regards, > >>>>> Harrison Tarr > >>>>> > >>>>> -----Original Message----- > >>>>> From: Harrison Tarr [mailto:harrison.t...@connexta.com] > >>>>> Sent: Wednesday, September 6, 2017 8:56 AM > >>>>> To: users@activemq.apache.org > >>>>> Subject: How to put "properties" on a message so they are accessible > >>>>> later > >>>>> > >>>>> Hi, > >>>>> > >>>>> I'm trying to put a StringProperty on a Message in an > >>>>> ActiveMQServerPlugin. As far as I can tell, the property gets set > >>>>> correctly. Later, I'm trying to retrieve the property from a Camel > >>>>> Exchange. I don't see my property anywhere on the Exchange. I did > >>>>> notice that it looks like the properties "firedTime" and > >>>>> "breadcrumbId," which I think come from Artemis, do appear on the > >>>>> Camel Exchange, which makes me think there is some way to propagate > >>>>> my > >>>> > >>>> property from Artemis to Camel. > >>>>> > >>>>> Regards, > >>>>> Harrison Tarr > >>>>> > >> -- > >> Tim Bish > >> twitter: @tabish121 > >> blog: http://timbish.blogspot.com/ > >> > > > > -- > > Tim Bish > > twitter: @tabish121 > > blog: http://timbish.blogspot.com/ > > > > > > -- > Clebert Suconic > > > -- camLine GmbH 85238 Petershausen, Industriering 4a, Deutschland Amtsgericht München HRB 88821 Geschäftsführer: Heinz Linsmaier (CEO), Bernhard Jofer, Georg Ruetz <http://www.camline.com/en/camline/events.html> <http://www.camline.com/en/camline/events.html> <http://www.camline.com/en/camline/events.html>