Hi Ryan,

how are you setting copyMessageOnSend - and are the consumers using vm://transport too ?

cheers,

Rob

http://open.iona.com/products/enterprise-activemq
http://rajdavies.blogspot.com/



On 23 May 2008, at 23:32, 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-tp17442075s2354p17442075.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.



Reply via email to