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