在RabbitMQ Java客户端中打开和关闭每次发布的通道 脚本

在RabbitMQ Java客户端中打开和关闭每次发布的通道 脚本,java,rabbitmq,channels,Java,Rabbitmq,Channels,我正在编写一个Java应用程序,它将产品从几个不同的来源导入数据库,然后将更新后的产品导出到其他系统,如搜索引擎和RSS提要。多次导入,多次导出。由于一些导出器尽快获得更新至关重要,我让它们保持运行,并通过RabbitMQ实例中的队列侦听更新。有些导入程序会批量处理文件(意味着会有很多更新在附近),有些导入程序会偶尔获得更新(一小时几次更新,比如管理员)。每个导入程序都有一个UpdateNotifier实例 例子 这是一个(稍微简化的)类,用于将更新产品的ID添加到RabbitMQ交换: pub

我正在编写一个Java应用程序,它将产品从几个不同的来源导入数据库,然后将更新后的产品导出到其他系统,如搜索引擎和RSS提要。多次导入,多次导出。由于一些导出器尽快获得更新至关重要,我让它们保持运行,并通过RabbitMQ实例中的队列侦听更新。有些导入程序会批量处理文件(意味着会有很多更新在附近),有些导入程序会偶尔获得更新(一小时几次更新,比如管理员)。每个导入程序都有一个UpdateNotifier实例

例子 这是一个(稍微简化的)类,用于将更新产品的ID添加到RabbitMQ交换:

public class UpdateNotifier
{
    private Connection conn;

    public UpdateNotifier(Connection alreadyOpenConnection)
    {
        conn = alreadyOpenConnection;
    }

    public void productIsUpdated(String id)
    {
        Channel chan = conn.createChannel();

        publishTheMessageToExchange(chan, id);

        chan.close();
    }
}
问题: 建议为每次发布打开一个新通道,然后关闭它,还是最好在UpdateNotifier的每个实例中缓存该通道

可能有两个不同的通知程序,一个用于在实例中保留通道的批量更新,另一个用于在每次更新时打开和关闭通道的零星更新

因此,它归结为:
打开和关闭通道的成本有多高?

创建和销毁通道对于RabbitMQ来说,这是一个非常简单和快速的操作

但是,如果需要高吞吐量,为每次发布创建/销毁通道可能会影响性能

在我看来,您不需要缓存通道等,只需为线程使用一个通道,您就安全了

我建议你读一读这篇文章,然后


这些链接可以帮助您调整RabbitMQ

链接不涉及频道,但非常有用。是的,您是对的,但不应该只关注频道。这些链接将帮助您了解总体情况。