Node.js / Redis - รอการเชื่อมต่อใช่ไหม

ฉันกำลังพัฒนาแอปพลิเคชันใน Node.js ที่ใช้ Redis เป็นฐานข้อมูลหลักและถอยกลับไปเป็น MySQL เมื่อ Redis ไม่พร้อมใช้งาน

ปัญหาที่ฉันมีคือ แตกต่างจาก node-mysql, node_redis ไม่ยอมรับการเรียกกลับในเมธอด createClient() และเพียงปล่อยข้อผิดพลาดในกรณีที่ล้มเหลว

ฉันจะจัดโครงสร้างโค้ดของฉันเพื่อจัดการกับสิ่งนี้ได้อย่างไร

สิ่งที่ฉันต้องการคือโดยพื้นฐาน (รหัสหลอก):

if can_connect_on_redis
    use_redis
else
    if can_connect_mysql
       use_mysql
    else
       fail
    end
end

person Schrute    schedule 21.09.2014    source แหล่งที่มา


คำตอบ (1)


ยังไม่ทดลอง:

var client  = redis.createClient();
var isReady = false;
var isError = false;

client.on('error', function() {
  if (! isReady && ! isError) {
    // perform your MySQL setup here
  }
  isError = true;
}).on('ready', function() {
  isReady = true;
});

แนวคิดก็คือเมื่อคุณได้รับข้อผิดพลาดก่อนที่ไคลเอ็นต์จะพร้อม คุณสามารถสรุปได้ว่าการเชื่อมต่อกับ Redis ล้มเหลว และคุณสามารถกลับไปใช้ MySQL ได้ เนื่องจากไคลเอ็นต์จะพยายามเชื่อมต่อใหม่ จะสร้างเหตุการณ์ข้อผิดพลาดต่อไป ดังนั้น isError guard

หากคุณต้องการถอยกลับไปใช้ MySQL หลังจากที่ไคลเอ็นต์สามารถตั้งค่าการเชื่อมต่อได้ (เช่น เมื่อเซิร์ฟเวอร์ Redis หยุดทำงาน) คุณสามารถลบตรรกะ isReady ได้

person robertklep    schedule 21.09.2014
comment
ขอบคุณ! รหัสของคุณทำงานได้ดี ฉันเพิ่งเพิ่มตรรกะเล็กน้อยเพื่อตรวจสอบจำนวนความพยายามในการเชื่อมต่อ และเมื่อถึง 3 ครั้ง ฉันจะเรียก client.end() เพื่อหยุดลองใช้ mysql - person Schrute; 21.09.2014