I have been trying to share connection between threads and have channels open only on thread creation but after researching a bit more, I think I want to also try to connection pooling. How can I do this on rabbitmq? or is this a general idea I can apply generally? My goal is to spawn X threads and then have them not have to open new channels(which requires round robin establishment between client and server).
Since the threads are their own class, I’m not sure if I need to put the pool in the class itself that spawns the threads or where they go?I also have multiple types of threads I would want to share these connections between(not just a single one). Is that possible?
Just to give you a general idea, here’s how connections/channels are estblished in rabbitmq:
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel(); //I want to share several of these between threads
All you need is a pool of
Channelobjects that your threads can pull from.The Apache commons actually already has a generic
ObjectPoolyou can use.The javadoc for the interface can be found here: http://commons.apache.org/pool/api-1.6/org/apache/commons/pool/ObjectPool.html
The javadoc for one of their pre-built implementations can be found here: http://commons.apache.org/pool/api-1.6/org/apache/commons/pool/impl/GenericObjectPool.html
A tutorial for using it can be found here: http://commons.apache.org/pool/examples.html
If this is over-complicated for you simple needs, really all you need to do is write a class that manages a set of
Channelobjects, allowing threads to check them out and return them to the pool, with the appropriate synchronization to prevent two threads from getting ahold of the sameChannel