I've been looking at DMLC lately.

Acknowledge semantics are a little different when using it though?

Isn't there the notion that you acknowledge before dispatch and therefore there lies an opportunity to acknowledge something from the queue and not actually process it
because of an outage.

JMS doesn't let you commit the session in any other thread than the thread of control of the session so you aren't going to have a guarantee that you actually processed
what was acknowledged/committed in the Session.

Also, DMLC doesn't do anything for you regarding order of processing so how does Spring address that problem? Am I expected to have N's DMLC's and dispatch based on my own rules rather than something that can share from a common thread pool but
still guarantee some order of processing?

On Sep 18, 2009, at 4:55 PM, Bruce Snyder wrote:

On Fri, Sep 18, 2009 at 1:11 PM, czy11421 <czy11...@gmail.com> wrote:
what is best practices to implement Multithread + JMS ?

Let us assume we are listening financial market data feed. I have this
coding like this:

class MyClass implements Listener{
 private final ExecutorService pool =
Executors.newFixedThreadPool(poolSize);
 onMessage(...){
   pool.execute(new Handler(Message));       }
 class Handler implements Runnable {
   public run(){
     // get data, same it into db
   }
 }
}

Anybody can share your experiences in this topic ?

When building JMS consumers, I recommend the use of the Spring
DefaultMessageListenerContainer:

http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/jms/listener/DefaultMessageListenerContainer.html

The DMLC provides the ability to set a TaskExecutor, a range of
concurrent consumers, various tiered caching levels (connection,
session, consumer), it works with transactions and much more. The
reason I recommend the DMLC (or one of the other message listener
containers) is because writing JMS clients is a lot of work and the
Spring message listener containers dramatically reduce the complexity
thereby saving you quite a lot of time. Given the tremendous
flexibility, the robustness, the high amount of configurability and
the widespread deployment in businesses all over the world (including
in the financial markets), there really no reason not to use it.

Together with the Spring CachingConnectionFactory
(http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/jms/connection/CachingConnectionFactory.html ),
these tools will speed your JMS development client developer markedly.

Bruce
--
perl -e 'print unpack("u30","D0G)u8...@4vyy9&5R\"F)R=6-E+G-N>61E<D\! G;6%I;\"YC;VT*"
);'

ActiveMQ in Action: http://bit.ly/2je6cQ
Blog: http://bruceblog.org/
Twitter: http://twitter.com/brucesnyder

Reply via email to