Bạn có thể tạm ngưng, tiếp tục, khởi động lại và tắt máy ảo (VM). Khi bất kỳ sự kiện nào trong số này xảy ra, nhà xuất bản, người đăng ký, ứng dụng RPC và máy chủ RPC đều bị ảnh hưởng. Hình 1 minh hoạ vòng đời của một gói dịch vụ:
Hình 1. Vòng đời của một gói dịch vụ.
Vòng đời của gói dịch vụ tuân theo trình tự sau:
- Phương thức
newđược gọi để tạo gói dịch vụ. - Trình quản lý vòng đời sẽ khởi động gói dịch vụ và tuỳ thuộc vào các chế độ cài đặt trong cấu hình điều phối, sẽ gọi
on_start. - Khi máy ảo dừng hoặc tạm ngưng và tuỳ thuộc vào chế độ cài đặt trong cấu hình điều phối, trình quản lý vòng đời sẽ gọi
on_stop. Hàmon_stopsẽ dừng các luồng cho nhà xuất bản, người đăng ký, ứng dụng RPC và máy chủ RPC. - Khi VM được tiếp tục,
on_startcó thể tạo lại các luồng nếu gói dịch vụ được định cấu hình để khởi động lại bằng cấu hình điều phối.
Tạo cấu hình để xử lý việc tạm ngưng và tiếp tục
Ví dụ sau đây cho thấy một cấu hình để xử lý trạng thái tạm ngưng và tiếp tục:
# 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" }
}
Trong trường hợp:
WAIT_FOR_FINISHlà trạng thái nguồn cuối cùng mà gói dịch vụ nên dự kiến các tác nhân xe được xác định bằng phần mềm (SDV) sẽ phản hồi.SUSPEND_TO_RAM_POST_FINISHcho biết rằng các tác nhân SDV có thể đóng hoặc tạm ngưng kết nối để có thể khôi phục chúng một cách đáng tin cậy khi tiếp tục. Điều quan trọng là bạn không được dựa vàoSUSPEND_TO_RAM_POST_FINISHhoặcPOWER_OFF_POST_FINISHđể gọionStoptrong quá trình triển khai gói dịch vụ mà thay vào đó, hãy dựa vàoSUSPEND_TO_RAM_ENTER,POWER_OFF_ENTERvàWAIT_FOR_FINISH.
Xác định phạm vi cung cấp dịch vụ
Ví dụ sau đây cho thấy cách sử dụng API phần mềm trung gian trong gói dịch vụ để xác định xem có đơn vị dịch vụ nào hay không:
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 là một API trung gian dùng để tạo một sự kiện có tên là unit_name. Luồng sự kiện đăng ký này sẽ được thông báo khi một đơn vị dịch vụ có sẵn.