Thanks Guillaume!
I'll look at why it's so cpu intensive to create a connection +
session + producer on the broker side
cheers,
Rob
On 3 Dec 2006, at 18:59, Guillaume Nodet wrote:
Over the past days, I worked on improving the connection pooling in
ActiveMQ, mainly for outbound. I found that:
* the o.a.a.pool package has a limited throughput when using
persistence
messaging, because all threads reuse a single connection, but
the broker
will handle the messages sequentially, so the throughput of
using a single
transaction in multiple threads is the same as using a single
thread.
* the activemq resource adapter used for outbound is really slow
(using
jencks), because the connection is completely reset after each
use. The
connection infos need to be sent each time + creation of an
advisory consumer
on the connection, + createion of the session + creation of a
producer. These
operations are very cpu intensive on the broker side (no real idea
why). I think
this should be improved by pooling sessions / producers.
For my current needs, I have enhanced the o.a.a.pool package to
support
enlisting the current session in an active xa transaction, and by
allowing
several connections to be used to raise the global throughput.
I have also added in jencks a derived pooled connection factory which
is compatible with jencks jca inbound support (the main problem is
that
the XAResource#isSameRM need to work and recognize that the inbound
connection and outbound connection use the same RM).
My last thought is that i wonder if the org.apache.activemq.pool
package
should be in its own module because it has its own set of dependencies
in addition to the standard jms client (commons-pool mainly) which can
lead to problems with classloaders.
--
Cheers,
Guillaume Nodet