我们的情况是,我们在美国东部有一个RabbitMQ节点,生产者在其他区域(爱尔兰,悉尼等)。从其他区域排队时,我们看到了巨大的性能命中率。悉尼 - > US-East队列排队消息是1s,而排队悉尼 - >悉尼是50ms。似乎很多时候花在创建频道和声明队列上。
我们有什么选择来改善表现?我们可以看看某种分布式RabbitMQ集群,每个地区都有一个节点吗?这对我们有帮助吗?
以下是我们用来测试的代码:
var queueConnection = amqp.connect("OUR amqp servers in each region")
var queueName = "test-queue"
var queueMessage = function(message) {
return queueConnection.then(function(conn) {
return conn.createChannel()
}).then(function(ch) {
var queue = ch.assertQueue(queueName, { durable: false });
return queue.then(function() {
ch.sendToQueue(queueName, new Buffer(JSON.stringify(message)), { deliveryMode: true });
return ch.close()
});
})
};
Promise.map(_.range(0, 10), function(item) {
var timedQueueMessage = timely.promise(queueMessage)
return timedQueueMessage({ name: "Dom" }).then(function(res) {
console.log("Completed in " + timedQueueMessage.time + "ms")
})
}, { concurrency: 10 }).done(process.exit)
答案 0 :(得分:1)
对于这些用例,您应该查看Federation或Shovel。
此页面解释了RabbitMQ提供的每个分布式选项的优缺点:http://www.rabbitmq.com/distributed.html