activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Clebert Suconic <clebert.suco...@gmail.com>
Subject Re: How to put "properties" on a message so they are accessible later
Date Wed, 11 Oct 2017 15:58:06 GMT
You would be able to call reencode on the message.

there was an issue that if you didn't have a property, the
applicationProperties wouldn't be set..


I added an example, and fixed that issue here:

https://github.com/apache/activemq-artemis/pull/1584


Notice you would need to do the else part in case of a core protocol
message.. (I didn't do that part here).

On Wed, Oct 11, 2017 at 4:46 AM, Matthias Hanisch
<matthias.hanisch@camline.com> wrote:
> 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.suconic@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 <tabish121@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:tabish121@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:jbertram@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.tarr@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: tbain98@gmail.com [mailto:tbain98@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.tarr@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.tarr@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>



-- 
Clebert Suconic

Mime
View raw message