Hizmet mimarisini tanımlama

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:

  • publisher hizmeti, ileti kuyruğuna ileti yayınlar.
  • message Protobuf'ta tanımlanan veri yapısı veya ileti türü (.protobuf uzantılı dosya).
  • topic Yayın konusunun benzersiz tanımlayıcısı. Küçük harflerle ve tireyle yazılmalıdır.
  • capacity Yayı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:

  • subscriber Hizmet paketi, konulara abone olur.
  • message Protobuf'ta tanımlanan veri yapısı veya ileti türü (.protobuf uzantılı dosya).
  • topic Yayı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 (service tarafından ClimateControl olarak tanımlanır).
  • client, hizmet paketinin ClimateControl hizmetini ç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.