Rob and I did some performance enhancements with queues so that a
Queue.send() call was decoupled from the dispatch processing. In the
past, depending on the state of the consumers, a Queue.send() call could
take a significant amount of time. We changed it so that a single
thread was responsible for dispatching messages, which avoided a lot of
lock contention. It also meant a Queue.send() returned as quickly as
possible.
I imagine a similar change could be done for Topics, since from what I
can tell, a Topic.send() call currently does its dispatch processing in
the same call.
Cheers,
David
Jim Gomes wrote:
I am very interested in this set of changes. I am currently
load/performance testing ActiveMQ, and am very surprised at the results.
Anything that can be done to speed this area is a good thing. I have found
a dramatic drop in performance when adding even a single consumer,
especially to a Topic. The producer to the Topic is slowed down quite a
bit, which was a surprise to me. I expected that the
existence/non-existence or performance of a consumer would have no impact on
a producer, but that is not the case. A producer is directly impacted by
any consumers, especially idle consumers. An idle Topic consumer can
actually cause a producer to block. As far as I have been able to determine
from browsing the documentation, this is by design.
I am looking forward to your efforts in this area.
Best Regards,
Jim
--
Cheers,
David
Nuix Pty Ltd
Suite 79, 89 Jones St, Ultimo NSW 2007, Australia Ph: +61 2 9280 0699
Web: http://www.nuix.com Fax: +61 2 9212 6902