Arsitektur layanan mengacu pada cara layanan disusun dan cara layanan berkomunikasi dengan komponen lain dalam sistem.
Membuat paket layanan
Paket layanan mengelompokkan unit layanan terkait yang dapat di-deploy bersama. Satu-satunya properti yang diperlukan untuk paket layanan adalah nama. Bersama dengan nama paket, nama ini membentuk nama yang sepenuhnya memenuhi syarat untuk paket layanan.
Paket layanan ditentukan dengan file Vehicle Services Interface Definition Language (VSIDL) (file dengan ekstensi .vsidl).
Contoh berikut menunjukkan dua paket layanan: paket layanan TirePressureMonitoring
dan paket layanan BodyControl:
package: "com.android.sdv.sample.vsidl"
service_bundle {
name: "TirePressureMonitoring"
}
service_bundle {
name: "BodyControl"
}
Dengan:
service_bundlemengidentifikasi struktur sebagai paket layanan.nameadalah nama paket layanan.
Pola pesan: Pub/Sub dan RPC
Framework SDV menggunakan dua pola pesan utama: Publish-Subscribe (Pub/Sub) dan remote procedure call (RPC).
Di Pub/Sub, sistem bereaksi terhadap perubahan status kendaraan dengan melakukan streaming data ke komponen yang tertarik. Data diatur ke dalam topik. Penerbit mengirim pesan di topik. Penayang mengirim pesan tentang topik tanpa perlu mengetahui pelanggan mana (atau berapa banyak pelanggan) yang mendengarkan. Pelanggan menerima pesan di topik tanpa mengetahui penayang mana yang mengirim pesan tersebut.
Sebaliknya, RPC dirancang untuk tindakan dan hasil. Digunakan saat pemanggil memulai permintaan karena mereka peduli dengan hasil atau konfirmasi tindakan tersebut. Pemanggil memanggil metode tertentu di saluran.
Meskipun pola ini melayani kebutuhan operasional yang berbeda, keduanya memiliki properti struktural yang sama: keduanya mengandalkan jalur komunikasi bernama—topik untuk Pub/Sub dan saluran untuk RPC—untuk memisahkan identitas pengirim dari penerima.
Mendeklarasikan penerbit dan pelanggan
Publish-subscribe adalah pola pengiriman pesan di mana pengirim pesan, yang disebut penayang, tidak mengirim pesan secara langsung ke penerima tertentu, yang disebut pelanggan. Sebagai gantinya, penayang mengategorikan pesan ke dalam topik dan pelanggan berlangganan satu atau beberapa topik komunikasi serta hanya menerima pesan yang dipublikasikan ke topik tersebut. Untuk mengetahui informasi lebih lanjut tentang publish-subscribe, lihat Pola publish-subscribe.
Menambahkan penerbit ke paket layanan
Contoh berikut menunjukkan penayang yang ditambahkan ke paket layanan TirePressureMonitoring:
package: "com.android.sdv.sample.vsidl"
service_bundle {
name: "TirePressureMonitoring"
publisher {
message: "TirePressure"
topic: "front-left"
capacity: 10
}
}
service_bundle {
name: "BodyControl"
...
}
Dengan:
publisherPesan layanan memublikasikan pesan ke antrean pesan.messageStruktur data atau jenis pesan yang ditentukan dalam protobuf (file dengan ekstensi.protobuf).topicID unik untuk topik publikasi. Harus dalam huruf kecil dengan kasus tanda hubung.capacityJumlah pesan yang dapat ditampung oleh antrean publikasi. Harus berupa bilangan genap yang lebih besar dari atau sama dengan 2.
Menambahkan langganan ke paket layanan
Contoh berikut menunjukkan penayang yang ditambahkan ke paket layanan BodyControl:
package: "com.android.sdv.sample.vsidl"
service_bundle {
name: "TirePressureMonitoring"
publisher {
message: "TirePressure"
topic: "front-left"
capacity: 10
}
}
service_bundle {
name: "BodyControl"
subscriber {
message: "com.android.sdv.sample.vsidl.TirePressure"
topic: "front-left"
}
}
Dengan:
- Paket Layanan
subscriberberlangganan topik. messageStruktur data atau jenis pesan yang ditentukan dalam protobuf (file dengan ekstensi.protobuf).topicID unik untuk topik publikasi. Harus cocok dengan topik penayang dan menggunakan huruf kecil dengan kasus tanda hubung.
Menentukan klien dan server RPC
Remote procedure call (RPC) memberikan independensi lokasi panggilan fungsi. Dalam pola ini, saluran berfungsi sebagai titik pertemuan bernama tempat klien dan penyedia bertemu. Dengan menargetkan channel, bukan instance layanan tertentu, framework memisahkan maksud perintah dari lokasi fisik penerapan.
Contoh berikut menetapkan paket layanan ClimateControl sebagai server
dan paket layanan BodyControl sebagai klien:
package: "com.sdv.cc"
service_bundle {
name: "ClimateControl"
server {
service: "SetTemperature"
channel: "climate-control"
}
}
service_bundle {
name: "BodyControl"
client {
service: "SetTemperature"
channel: "climate-control"
}
}
Dengan:
servermenunjukkan bahwa paket layanan adalah server yang menyediakan beberapa layanan RPC (diidentifikasi olehservicesebagaiSetTemperature).clientmenunjukkan bahwa paket layanan adalah klien yang memanggil layananSetTemperature.channeladalah nama saluran RPC. Nama ini harus dalam huruf kecil dengan kasus tanda hubung dan unik per layanan.
Contoh ini memungkinkan paket layanan BodyControl melakukan panggilan prosedur jarak jauh ke paket layanan ClimateControl untuk menyetel suhu.
Langkah berikutnya
Setelah menentukan arsitektur, buat kode middleware.