activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ttmdev <joe.fernan...@ttmsolutions.com>
Subject Re: VM transport not using pass-by-reference
Date Thu, 29 May 2008 14:46:39 GMT

FYI - copyMessageOnSend is being used within the ActiveMQSession.send()
method. 

...
if (connection.isCopyMessageOnSend()) {
   msg = (ActiveMQMessage)msg.copy();
}
...

Joe


Ryan Stewart wrote:
> 
> I'm trying to use an embedded ActiveMQ instance for some lightweight
> message handling. According to the 
> http://activemq.apache.org/vm-transport-reference.html VM Transport
> Reference  and 
> http://activemq.apache.org/how-should-i-use-the-vm-transport.html this FAQ
> , the VM transport should pass messages by reference, giving some nice,
> lean performance.
> 
> I'm using version 5.1.0 final. All in one VM, I create one producer and
> then x durable subscribers to a topic. They all use vm://default for the
> connection URI, which, according to the docs, starts a single embedded
> broker.
> 
> Using a profiler, I see that for every message to the topic, 2x message
> objects are created (ActiveMQTextMessage in this case). i.e. If I have 10
> subscribers and send 100 messages, I end up with 2001 messages in memory
> if none are consumed. That's 1 message cached in the producer for sending
> and 2000 others that result from the sends. I've set copyMessageOnSend to
> false in both the producer and consumers, but 1) looking at the source of
> ActiveMQConnection, this setting seems to not be used, and 2) if it were
> used, I suspect it should only need to be set on producers.
> 
> In addition to the number of messages being created, they are going
> through some sort of marshaling/unmarshaling process, which causes their
> related ActiveMQTopic object to also be replicated a number of times: once
> for every two messages that exist, in fact. I assume something like this
> is happening:
> 
> 1) producer puts message in topic
> 2) topic creates a copy of each message for each consumer and pushes to
> consumer via marshaling mechanism
> 3) consumer unmarshals message resulting in another message instance plus
> a topic instance
> 
> That would mean that step 2 creates one message per subscriber, and step 3
> creates one message and one topic per subscriber, which accounts for the
> numbers I'm seeing.
> 
> My main question is how to get the number of message objects down.
> Ideally, I'd like to see it at 1 since the producer is just sending the
> same message over and over right now. Any hints?
> 

-- 
View this message in context: http://www.nabble.com/VM-transport-not-using-pass-by-reference-tp17442075s2354p17536264.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.


Mime
View raw message