gpt4 book ai didi

java - 我如何在 rabbitmq 中合并 channel ?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:43:53 25 4
gpt4 key购买 nike

我一直在尝试在线程之间共享连接,并且只在线程创建时打开 channel ,但经过更多研究后,我想我也想尝试连接池。我如何在 rabbitmq 上执行此操作?或者这是我可以普遍应用的一般想法?我的目标是生成 X 个线程,然后让它们不必打开新 channel (这需要在客户端和服务器之间建立循环机制)。

由于线程是它们自己的类,我不确定是否需要将池放在产生线程的类本身或它们去哪里?我也有多种类型的线程我想共享这些连接之间(不仅仅是一个)。这可能吗?

只是为了给你一个大概的概念,这里是如何在 rabbitmq 中建立连接/ channel 的:

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

接口(interface)的 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 对象,允许线程 check out 它们并将它们返回给池,通过适当的同步来防止两个线程获取同一个 Channel

关于java - 我如何在 rabbitmq 中合并 channel ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10365867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com