Hizmet mimarisi, hizmetlerin nasıl oluşturulduğunu ve sistemdeki diğer bileşenlerle nasıl iletişim kurduğunu ifade eder.
Hizmet paketleri oluşturma
Hizmet paketleri, birlikte dağıtılabilen ilgili hizmet birimlerini gruplandırır. Hizmet paketi için gereken tek özellik addır. Ad, paket adıyla birlikte hizmet paketinin tam nitelikli adını oluşturur.
Hizmet paketleri, Araç Hizmetleri Arayüzü Tanım Dili (VSIDL) dosyalarıyla (.vsidl uzantılı dosyalar) tanımlanır.
Aşağıdaki örnekte iki hizmet paketi gösterilmektedir: TirePressureMonitoring hizmet paketi ve BodyControl hizmet paketi:
package: "com.android.sdv.sample.vsidl"
service_bundle {
name: "TirePressureMonitoring"
}
service_bundle {
name: "BodyControl"
}
Nerede:
service_bundle, yapıyı hizmet paketi olarak tanımlar.name, hizmet paketinin adıdır.
Mesajlaşma kalıpları: Pub/Sub ve RPC
SDV çerçevesi iki temel mesajlaşma kalıbı kullanır: yayınlama-abone olma (Pub/Sub) ve uzak prosedür çağrısı (RPC).
Pub/Sub'da sistem, ilgilenen tüm bileşenlere veri akışı yaparak aracın değişen durumuna tepki verir. Veriler konulara göre düzenlenir. Yayıncılar, konularla ilgili mesajlar gönderir. Yayıncı, hangi (veya kaç) abonenin dinlediğini bilmesine gerek kalmadan konularla ilgili mesajlar gönderir. Aboneler, hangi yayıncıların gönderdiğini bilmeden konularla ilgili mesajlar alır.
Buna karşılık, RPC işlem ve sonuç için tasarlanmıştır. Arayan, belirli bir sonuç veya işlemin onaylanmasıyla ilgilendiği için istek başlattığında kullanılır. Arayan, kanalda belirli bir yöntemi çağırır.
Bu kalıplar farklı operasyonel ihtiyaçlara hizmet etse de ortak bir yapısal özelliği paylaşır: Her ikisi de gönderenin kimliğini alıcıdan ayırmak için adlandırılmış iletişim yollarına (Pub/Sub için konular, RPC için kanallar) dayanır.
Yayıncı ve abone bildirme
Yayın-abonelik, mesaj gönderenlerin (yayıncılar) mesajları doğrudan belirli alıcılara (aboneler) göndermediği bir mesajlaşma modelidir. Bunun yerine, yayıncılar mesajları konular halinde kategorize eder ve aboneler bir veya daha fazla iletişim konusuna abone olarak yalnızca bu konularda yayınlanan mesajları alır. Yayınlama/abone olma hakkında daha fazla bilgi için Yayınlama/abone olma modeli başlıklı makaleyi inceleyin.
Hizmet paketine yayıncı ekleme
Aşağıdaki örneklerde, TirePressureMonitoring hizmet paketine eklenen bir yayıncı gösterilmektedir:
package: "com.android.sdv.sample.vsidl"
service_bundle {
name: "TirePressureMonitoring"
publisher {
message: "TirePressure"
topic: "front-left"
capacity: 10
}
}
service_bundle {
name: "BodyControl"
...
}
Nerede:
publisherhizmeti, ileti kuyruğuna ileti yayınlar.messageProtobuf'ta tanımlanan veri yapısı veya ileti türü (.protobufuzantılı dosya).topicYayın konusunun benzersiz tanımlayıcısı. Küçük harflerle ve tireyle yazılmalıdır.capacityYayınlama sırasının tutabileceği ileti sayısı. 2'ye eşit veya 2'den büyük bir çift sayı olmalıdır.
Hizmet paketine abonelik ekleme
Aşağıdaki örnekte, BodyControl hizmet paketine eklenen bir yayıncı gösterilmektedir:
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"
}
}
Nerede:
subscriberHizmet paketi, konulara abone olur.messageProtobuf'ta tanımlanan veri yapısı veya ileti türü (.protobufuzantılı dosya).topicYayın konusunun benzersiz tanımlayıcısı. Yayıncının konusuyla eşleşmeli ve küçük harf-tireli olmalıdır.
UPÇ istemcilerini ve sunucularını tanımlama
Uzak prosedür çağrısı (RPC), işlev çağrılarının konumdan bağımsız olmasını sağlar. Bu düzende kanal, istemci ve sağlayıcının buluştuğu adlandırılmış buluşma noktası olarak işlev görür. Çerçeve, belirli bir hizmet örneği yerine kanalı hedefleyerek komutun amacını uygulamanın fiziksel konumundan ayırır.
Aşağıdaki örnekte, CabinComfort hizmet paketi bir ClimateControl sunucusunu barındırıyor ve BodyControl hizmet paketi bir ClimateControl istemcisini barındıracak şekilde genişletiliyor:
package: "com.sdv.cc"
service_bundle {
name: "CabinComfort"
server {
service: "ClimateControl"
channel: "front-climate-control"
}
}
service_bundle {
name: "BodyControl"
client {
service: "ClimateControl"
channel: "front-climate-control"
}
subscriber {
message: "com.android.sdv.sample.vsidl.TirePressure"
topic: "front-left"
}
}
Nerede:
server, hizmet paketinin bazı TBG hizmetleri sağlayan bir sunucu içerdiğini gösterir (servicetarafındanClimateContrololarak tanımlanır).client, hizmet paketininClimateControlhizmetini çağıran bir istemci içerdiğini gösterir.channel, RPC kanalının adıdır. Küçük harflerle yazılmış ve tireli olmalı, hizmet başına benzersiz olmalıdır.
Bu örnek, BodyControl hizmet paketinin kabinin ön bölgesinin iklimini kontrol etmek için CabinComfort hizmet paketine uzak yordam çağrıları yapmasına olanak tanır.
Sonraki adımlar
Mimarınızı tanımladıktan sonra ara katman yazılımı kodu oluşturun.