【问题标题】:Open and close Channel with each publish in RabbitMQ Java Client在 RabbitMQ Java 客户端中每次发布时打开和关闭 Channel
【发布时间】:2016-05-12 11:39:45
【问题描述】:

场景

我正在编写一个 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 实例中?

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

所以归结为: 打开和关闭频道的成本是多少?

【问题讨论】:

    标签: java rabbitmq channels


    【解决方案1】:

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

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

    在我看来,您不需要缓存通道等,只需将一个通道用于线程就可以了。

    我建议阅读此https://www.rabbitmq.com/production-checklist.htmlhttps://www.rabbitmq.com/networking.html

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

    【讨论】:

    • 链接没有说明渠道,但仍然有用。
    • 是的,你是对的,但你不应该只关注渠道。这些链接将帮助您了解总体情况。
    猜你喜欢
    • 2020-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多