我一直在尝试在线程之间共享连接,并仅在线程创建时打开通道,但经过更多研究后,我想我也想尝试connection pooling
。我怎样才能在rabbitmq上做到这一点?或者这是我可以普遍应用的一般想法?我的目标是生成 X 个线程,然后让它们不必打开新通道(这需要在客户端和服务器之间建立循环)。
由于线程是它们自己的类,我不确定是否需要将池放在生成线程的类本身中或它们去哪里?我也有多种类型的线程,我想在它们之间共享这些连接(不是只有一个)。那可能吗?
只是为了给您一个总体概念,以下是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
你所需要的只是一个池子Channel
您的线程可以从中提取的对象。
Apache commons 实际上已经有了一个通用的ObjectPool
您可以使用。
可以在此处找到该接口的 javadoc:http://commons.apache.org/pool/api-1.6/org/apache/commons/pool/ObjectPool.html
可以在此处找到其预构建实现之一的 javadoc:http://commons.apache.org/pool/api-1.6/org/apache/commons/pool/impl/GenericObjectPool.html
可以在这里找到使用它的教程:http://commons.apache.org/pool/examples.html
如果这对于您的简单需求来说过于复杂,那么实际上您需要做的就是编写一个管理一组的类Channel
对象,允许线程检查它们并将它们返回到池中,并进行适当的同步以防止两个线程获取相同的对象Channel
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)