ভার্চুয়াল মেশিন (VM) সাসপেন্ড, রিজুম, রিবুট এবং শাট ডাউন করা যায়। যখন এই ঘটনাগুলোর কোনোটি ঘটে, তখন পাবলিশার, সাবস্ক্রাইবার, RPC ক্লায়েন্ট এবং RPC সার্ভারগুলো প্রভাবিত হয়। চিত্র ১-এ একটি সার্ভিস বান্ডেলের জীবনচক্র দেখানো হয়েছে:

চিত্র ১. একটি সার্ভিস বান্ডেলের জীবনচক্র।
সার্ভিস বান্ডেলের জীবনচক্র নিম্নলিখিত ক্রম অনুসরণ করে:
- সার্ভিস বান্ডেল তৈরি করার জন্য
newপদ্ধতিটি কল করা হয়। - লাইফসাইকেল ম্যানেজার সার্ভিস বান্ডেলটি চালু করে এবং অর্কেস্ট্রেশন কনফিগারেশনের সেটিংস অনুযায়ী
on_startকল করে। - যখন ভিএম বন্ধ বা সাসপেন্ড হয়, তখন অর্কেস্ট্রেশন কনফিগারেশনের সেটিংসের উপর নির্ভর করে লাইফসাইকেল ম্যানেজার
on_stopফাংশনটি কল করে। এইon_stopফাংশনটির কাজ হলো পাবলিশার, সাবস্ক্রাইবার, আরপিসি ক্লায়েন্ট এবং আরপিসি সার্ভারের থ্রেডগুলো বন্ধ করে দেওয়া। - যখন ভিএম পুনরায় চালু করা হয়, তখন যদি অর্কেস্ট্রেশন কনফিগারেশন দ্বারা সার্ভিস বান্ডেলটি আবার চালু করার জন্য কনফিগার করা থাকে, তাহলে
on_startথ্রেডগুলি পুনরায় তৈরি করতে পারে।
সাসপেন্ড এবং রিজুম পরিচালনা করার জন্য একটি কনফিগারেশন তৈরি করুন।
নিম্নলিখিত উদাহরণটি সাসপেন্ড এবং রিজুম পরিচালনা করার জন্য একটি কনফিগারেশন দেখায়:
# 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হলো সর্বশেষ পাওয়ার স্টেট, যে অবস্থায় সার্ভিস বান্ডেলটি সফটওয়্যার ডিফাইন্ড ভেহিকেল (SDV) এজেন্টদের সাড়া দেওয়ার প্রত্যাশা করে। -
SUSPEND_TO_RAM_POST_FINISHনির্দেশ করে যে, SDV এজেন্টরা পুনরায় চালু করার সময় নির্ভরযোগ্যভাবে সংযোগ পুনরুদ্ধার করার জন্য সেগুলোকে বন্ধ বা স্থগিত করতে পারে। সার্ভিস বান্ডেল ইমপ্লিমেন্টেশনেonStopকল করার জন্যSUSPEND_TO_RAM_POST_FINISHবাPOWER_OFF_POST_FINISHউপর নির্ভর না করা এবং এর পরিবর্তেSUSPEND_TO_RAM_ENTER,POWER_OFF_ENTER, এবংWAIT_FOR_FINISHউপর নির্ভর করা গুরুত্বপূর্ণ।
পরিষেবার প্রাপ্যতা নির্ধারণ করুন
নিম্নলিখিত উদাহরণটি দেখায় কিভাবে আপনার সার্ভিস বান্ডেলে মিডলওয়্যার এপিআই ব্যবহার করে একটি সার্ভিস ইউনিট উপলব্ধ আছে কিনা তা নির্ধারণ করা যায়:
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 হলো একটি মিডলওয়্যার এপিআই যা unit_name নামক একটি ইভেন্ট তৈরি করতে ব্যবহৃত হয়। যখন কোনো সার্ভিস ইউনিট উপলব্ধ হয়, তখন এই রেজিস্ট্রেশন ইভেন্ট স্ট্রিমে বিজ্ঞপ্তি পাঠানো হয়।