activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gary Tully <>
Subject Re: What is necessary to optimize performance?
Date Thu, 13 Feb 2014 11:47:49 GMT
for some contrast, maybe peek at  -
which is a springless camel jms component

- parallel producers make sense  for persistent messages b/c they
allow more writes to be batched broker side.

- receive vs message listener are very similar b/c the broker prefetch
is in play in both cases.

- selectors only match in memory so there is the possibility of
starvation on really deep queues. Simple matchers have low impact.

On 13 February 2014 09:29, Christian Schneider <> wrote:
> Hi all,
> I am currently rewriting the CXF jms transport to get rid of spring jms. So
> two parts that I needed to replace are the JmsTemplate and the
> DefaultMessageListenerContainer.
> So the question is which features of these should I recreate and which are
> not necessary. Some more concrete questions below:
> Lets first look at the sender side. I am currently working with a single
> connection per CXF conduit and open sessions on it per thread.
> On the receiving side I use either consumer.receive() or a message listener
> depending if the incoming CXF call is synchronous or asynchronous.
> 1. Will it make sense to use more than one connection in parallel? ( I
> observed that all sessions seem to be synchronized when activemq sends the
> data. On the other hand it all has to go through the one network anyway).
> Using several connections is problematic in the case of a temporary reply
> queue as I have to make sure the queue is created by the same connection
> that then sends and receives on it. I could use one temp queue per
> connection of course but this would make the code a lot more complicated.
> 2. Is there a difference performance wise between consumer.receive and a
> message listener?
> 3. I use a messageSelector for correlation. How much does this impact
> performance?
> The next one is the server side.
> DefaultMessageListenerContainer uses several consumers in parallel in
> addition to a ExecutorService to then parallelize the calls to the
> MessageListener.
> It also seems to spawn one thread per consumer where it polls using
> consumer.receive().
> 1. I currently use one connection and one consumer and only after that
> parallelize using an ExecutorService. Should I use more than one consumer
> and or more than one connection ?
> If anyone wants to look at the current sources. They can be found in the
> trunk of cxf. For convenience look here:
> I would be happy about any feedback regarding the implementation.
> Best regards
> Christian
> --
> Christian Schneider
> Open Source Architect


View raw message