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, verileri ilgilenen tüm bileşenlere aktararak aracın değişen durumuna tepki verir. Veriler konular halinde 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, mesajları hangi yayıncıların gönderdiğini bilmeden konularla ilgili mesajlar alır.

Bunun aksine, RPC işlem ve sonuç için tasarlanmıştır. Arayan, belirli bir sonuç veya işlemin onayıyla ilgilendiği için bir istek başlattığında kullanılır. Arayan, bir 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ınlama-abonelik, ileti gönderenlerin (yayıncılar) iletileri doğrudan belirli alıcılara (aboneler) göndermediği bir mesajlaşma modelidir. Bunun yerine yayıncılar, iletileri konular halinde kategorize eder ve aboneler bir veya daha fazla iletişim konusuna abone olarak yalnızca bu konularda yayınlanan iletileri alır. Yayınlama-abonelik hakkında daha fazla bilgi için Yayınlama-abonelik 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, ClimateControl hizmet paketi sunucu, BodyControl hizmet paketi ise istemci olarak belirlenmiştir:

package: "com.sdv.cc"

service_bundle {
  name: "ClimateControl"

  server {
    service: "SetTemperature"
    channel: "climate-control"
  }
}

service_bundle {
  name: "BodyControl"

  client {
    service: "SetTemperature"
    channel: "climate-control"
  }
}

Nerede:

  • server, hizmet paketinin bir RPC hizmeti sağlayan bir sunucu olduğunu gösterir (service tarafından SetTemperature olarak tanımlanır).
  • client, hizmet paketinin SetTemperature hizmetini çağıran bir istemci olduğunu 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 sıcaklığı ayarlamak için ClimateControl hizmet paketine uzaktan 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.