Fre*_*ris 2 java rabbitmq channels
我正在编写一个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();
}
}
Run Code Online (Sandbox Code Playgroud)
是否建议为每个发布打开一个新通道然后关闭它,或者最好在UpdateNotifier的每个实例中缓存Channel?
也许两个不同的通知程序,一个用于批量更新,在实例中保留一个通道,另一个用于每次更新打开和关闭通道的零星更新?
所以归结为: 开启和关闭频道的成本有多高?
创建和销毁一个通道,这对RabbitMQ来说非常简单快捷.
但是,如果您需要高吞吐量创建/销毁每个发布的通道可能会影响性能.
对于我的观点,你不需要缓存通道等,只需使用一个通道进行线程,你就是安全的.
我建议你阅读这个https://www.rabbitmq.com/production-checklist.html 和https://www.rabbitmq.com/networking.html.
这些链接可以帮助您调整RabbitMQ