我一直在测试发送消息和从 SQS 队列接收消息所需的时间。平均需要 800-1200 毫秒,这似乎是一个非常长的时间。这是我的测试代码,如果我做错了什么,请告诉我。
var t0;
sendMessage('hello');
function sendMessage(message){
var params = {
MessageBody: message,
QueueUrl: queueUrl
};
t0 = now();
sqs.sendMessage(params, function(err,data){
if(err){
throw err;
} else {
console.log("Message Send Confirmation");
}
});
unbatch();
}
async function unbatch(){
var params = {
QueueUrl: queueUrl,
MaxNumberOfMessages: 10
};
var go = true;
while(go){
console.log("Polling...");
sqs.receiveMessage(params, function(err, data){
if(data.Messages){
console.log("Message Received");
console.log("Total Time: " + ((now() - t0)/1000));
go = false;
var deleteParams = {
QueueUrl: queueUrl,
ReceiptHandle: data.Messages[0].ReceiptHandle
};
sqs.deleteMessage(deleteParams, function(err, data) {
if (err) {
console.log("Delete Error", err);
} else {
console.log("Message Deleted");
}
});
}
});
await sleep(1);
}
}
function sleep(ms){
return new Promise(resolve => setTimeout(resolve, ms));
}
它发送消息并立即开始尝试每毫秒接收一条消息。一旦收到,它就会计算时间。这难道不应该花费更少的时间吗?
使用任何队列的原因不是为了性能,而是为了弹性。
队列解决了许多问题,它们在断开连接的系统之间提供异步通信,它们允许您很好地扩展系统,并提供增强的弹性,确保消息在系统故障时不会“丢失”。
使用队列时,您应该考虑围绕以下概念设计系统:eventual consistency
这意味着您的消息最终会到达那里并得到处理,但可能不会按您期望的时间甚至顺序进行处理。
速度、排序、重试等功能因队列实现(SQS、Kafka、RabbitMq 等)而异。
如果您正在寻找超高 IOPS,那么队列可能不是您想要的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)