จัดการการระงับและกลับมาให้บริการ

เครื่องเสมือน (VM) สามารถระงับ หยุดชั่วคราว รีบูต และปิดเครื่องได้ เมื่อเกิดเหตุการณ์ใดเหตุการณ์หนึ่งเหล่านี้ ผู้เผยแพร่โฆษณา ผู้สมัครรับข้อมูล ไคลเอ็นต์ RPC และเซิร์ฟเวอร์ RPC จะได้รับผลกระทบ รูปที่ 1 แสดงวงจรของ Service Bundle ดังนี้

วงจรของแพ็กเกจบริการ

รูปที่ 1 วงจรของ Service Bundle

วงจรของ Service Bundle เป็นไปตามลำดับต่อไปนี้

  1. เรียกใช้เมธอด new เพื่อสร้าง Service Bundle
  2. ตัวจัดการวงจรจะเริ่ม Service Bundle และเรียกใช้ on_start ทั้งนี้ขึ้นอยู่กับการตั้งค่าในการกำหนดค่าการจัดระเบียบ
  3. เมื่อ VM หยุดหรือระงับ และตัวจัดการวงจรจะเรียกใช้ on_stop ทั้งนี้ขึ้นอยู่กับการตั้งค่าในการกำหนดค่าการจัดระเบียบ ฟังก์ชัน on_stop ควรหยุดเธรดสำหรับผู้เผยแพร่โฆษณา ผู้สมัครรับข้อมูล ไคลเอ็นต์ RPC และเซิร์ฟเวอร์ RPC
  4. เมื่อ VM กลับมาทำงานต่อ on_start จะสร้างเทรดขึ้นใหม่ได้หากมีการกำหนดค่า Service Bundle ให้เริ่มทำงานอีกครั้งโดยการกำหนดค่าการจัดการเป็นกลุ่ม

สร้างการกำหนดค่าเพื่อจัดการการระงับและการกลับมาทำงานต่อ

ตัวอย่างต่อไปนี้แสดงการกำหนดค่าเพื่อจัดการการระงับและการกลับมาทำงานต่อ

# Start `auto_start` service bundles when system is started.
state {
    condition {
        or {
            power_state: "ON"
            power_state: "POWER_OFF_EXIT"
            power_state: "SUSPEND_TO_RAM_EXIT"
        }
    }
    groups_states { started: "auto_start" }
}

# Stop `auto_start` service bundles when system is suspending to RAM.
state {
    condition {
        or {
            power_state: "SUSPEND_TO_RAM_ENTER"
            power_state: "WAIT_FOR_FINISH"
            power_state: "SUSPEND_TO_RAM_POST_FINISH"
        }
    }
    groups_states { created: "auto_start" }
}

โดยที่

  • WAIT_FOR_FINISH คือสถานะพลังงานสุดท้ายที่ Service Bundle คาดหวังให้ตัวแทนยานยนต์ที่กำหนดโดยซอฟต์แวร์ (SDV) ตอบสนอง
  • SUSPEND_TO_RAM_POST_FINISH บ่งชี้ว่าตัวแทน SDV อาจปิดหรือระงับการเชื่อมต่อเพื่อให้สามารถกู้คืนได้อย่างน่าเชื่อถือเมื่อกลับมาทำงานต่อ คุณไม่ควรใช้ SUSPEND_TO_RAM_POST_FINISH หรือ POWER_OFF_POST_FINISH เพื่อเรียกใช้ onStop ในการติดตั้งใช้งาน Service Bundle แต่ควรใช้ SUSPEND_TO_RAM_ENTER, POWER_OFF_ENTER และ WAIT_FOR_FINISH แทน

กำหนดความพร้อมให้บริการ

ตัวอย่างต่อไปนี้แสดงวิธีใช้ Middleware API ใน Service Bundle เพื่อตรวจสอบว่าหน่วยบริการพร้อมใช้งานหรือไม่

let mut registration_event_stream =  sdv::mw::clientlib::create_server_registration_event_stream(
        sdv_comms,
        // Descriptor of type sdv::mw::clientlib::rpc_descriptor::client::Descriptor
        // that binds a specific RPC client type to a communication channel.
        client_descriptor,
    )
    .await
    .expect("unable to generate a registration event");

match registration_event_stream.next().await {
            Some(sdv::mw::Availability::Available) => {
                info!("{unit_name} became Available.");
                // Create client/subscriber
            }
            Some(sdv::mw::Availability::Unavailable) => {
                info!("{unit_name} became Unavailable.");
                // Destroy client/subscriber
            }
            None => {
                warn!("Registration event stream for {unit_name} terminated.
                Stopping monitoring for this variant.");
            }
        }

create_server_registration_event_stream คือ Middleware API ที่ใช้สร้างเหตุการณ์ที่เรียกว่า unit_name ระบบจะแจ้งสตรีมเหตุการณ์การลงทะเบียนนี้เมื่อหน่วยบริการพร้อมใช้งาน