Skip to content

Latest commit

 

History

History
72 lines (48 loc) · 3.59 KB

File metadata and controls

72 lines (48 loc) · 3.59 KB

uStreamer

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in IETF BCP14 (RFC2119 & RFC8174)

Copyright (c) 2023 General Motors GTO LLC

Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.

SPDX-FileType: DOCUMENTATION
SPDX-FileCopyrightText: 2023 General Motors GTO LLC
SPDX-License-Identifier: Apache-2.0

1. Overview

The streamer is a uProtocol dispatcher responsible to route messages to/from the local uTransport to one or more remote uTransports. Local uTransport refers to the transport implementation that the streamer is running on (the transport for the device that the streamer is deployed to). Remote UTransports are any non-local transports that messages need to be forwarded to.

Note
The term local transport could also be commonly referred as downstream transport vs remote transport referred as upstream transport, we use the term local vs remote as they are also commonly used for our addressing scheme in uProtocol.
  • locally addressed messages MUST NOT be routed to remote transports

Streamer use the uTransport APIs to configure the flow of messages between the local and remote transports.

2. Routing Policies

Streamer dispatches messages by declaring simple routing policies to either route or forward messages to/from a given transport to another using the UTransport API.

The Transport boundaries match up with UUri UAuthority to make the declaration of the policies simpler.

Note
UDevices that have connected through the same transport do not require defining routing policies as the underlining transport takes care of the dispatching of messages.

2.1. Routing Examples

Below is an example of a simple routing configuration to connect a single local transport with a remote transport. for the purpose of this example, the local device will have UAuthority uLocal and the remote device will be have the UAuthority URemote.

yes one sec
#legend
Figure 1. Legend

2.2. Building uStreamers using uTransport APIs

[streamer-flow] diagram below illustrates how the uTransport APIs are used to build a uStreamer. The uTransport APIs are used to send/receive UMessages over the underlining communication middleware. The uStreamer is responsible for routing the UMessages to the appropriate uE based on the UMessage header attributes.

Streamer Flows using uTransport

#streamer_flow

2.3. RPC Flows

[rpc-flow] diagram below illustrates how the uPClient RpcClient & RpcServer interfaces are then connected to the uTransport such that a transport can send/receive the UMessages over the underlining communication middleware .Rpc Flows #rpc_flow