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 16:14:51 GMT
Just opened and it works for me

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


On Wed, Oct 11, 2017 at 12:02 PM Harrison Tarr <harrison.tarr@connexta.com>
wrote:

> Clebert,
>
> That PR URL gives me a 404.
>
> Harrison
>
> -----Original Message-----
> From: Clebert Suconic [mailto:clebert.suconic@gmail.com]
> Sent: Wednesday, October 11, 2017 9:00 AM
> To: users@activemq.apache.org
> Subject: Re: How to put "properties" on a message so they are accessible
> later
>
> What Harryson said matches my PR.. you you would need to call the method
> reencode. .otherwise you won't receive the messages.. and it wouldn't be
> persisted.
>
> On Wed, Oct 11, 2017 at 11:58 AM, Clebert Suconic <
> clebert.suconic@gmail.com> wrote:
> > Please look at the pull request.. I believe it would fix help you:
> >
> > https://github.com/apache/activemq-artemis/pull/1584
> >
> > On Wed, Oct 11, 2017 at 11:58 AM, Clebert Suconic
> > <clebert.suconic@gmail.com> wrote:
> >> 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 ActiveMQServer
> <https://maps.google.com/?q=ribute/property+on+a+message+in+an+ActiveMQServer&entry=gmail&source=g>
> Plugin
> >>>> >>>>> 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
> >
> >
> >
> > --
> > Clebert Suconic
>
>
>
> --
> Clebert Suconic
>
-- 
Clebert Suconic

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message