Service Discovery

Since there does not exist a ELT control software wide solution for service discovery yet, the RTC Toolkit introduces a very basic service discovery mechanism that allows lookup and retrieval of service endpoints by name.

The discovery mechanism makes use of the Client-Side Discovery Pattern where a client retrieves endpoints of required services by querying a central service registry (a database).

The service registry is implemented using the same mechanisms as the file based Runtime Configuration Repository and its storage back-end is a single, shared YAML file.

Service endpoints are represented in URI format and retrieved using the elt::mal::Uri class.

Supported Service Types

Currently the following service types are supported:

Service Type

Format

Description

persist_repo_endpoint

elt::mal::Uri

Service endpoint of the Persistent Configuration Repository.

runtime_repo_endpoint

elt::mal::Uri

Service endpoint of the Runtime Configuration Repository.

oldb_endpoint

elt::mal::Uri

Service endpoint of the Online Database.

req_rep_endpoint

elt::mal::Uri

CII MAL request/reply endpoint of an RTC Component.

pub_sub_endpoint

elt::mal::Uri

CII MAL publish/subscribe endpoint of an RTC Component.

For persist_repo_endpoint only the file URI scheme is supported (see section Service Discovery Endpoint).

For runtime_repo_endpoint (see section Data Access for Runtime Configuration Repository) and oldb_endpoint (see Data Access for OLDB) either the cii.oldb URI scheme can be used for the fully fledged implementations, or the file scheme for the file based implementations.

Limitations and Known Issues

The current implementation of the service registry is only a temporary one, it will be replaced by a CII conformant service registry once this is available.

Currently it is not foreseen that developers define custom service types in the service registry. Users are only supposed to re-use the available service types e.g. to add endpoints for new components to the YAML file or to adjust the endpoints of existing components.