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)
SPDX-FileCopyrightText: 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional information regarding copyright ownership. This program and the accompanying materials are made available under the terms of the Apache License Version 2.0 which is available at https://www.apache.org/licenses/LICENSE-2.0 SPDX-FileType: DOCUMENTATION SPDX-License-Identifier: Apache-2.0
Application layer, also known as the business logic layer, is responsible for declaration interfaces between clients and servers for features and functions, the API layer that defines the methods and topics served by a service.
In this specification we will also define core uProtocol business logic (APIs) such as subscription management, discovery, and digital twin. These interfaces are declared once, used everywhere so that the mental model for developers is consistent across different heterogeneous systems.
uProtocol supports the architecture patterns defined in the table below to implement the majority of use cases that could be required for business logic communication between clients and services.
Architecture Pattern | Delivery Policy | Description | Requirements |
---|---|---|---|
RPC |
At-least-once |
When uE requires acknowledgement from the receiver |
|
Publication |
At-most-once |
When uE wishes to publish an CE to multiple consumers (a.k.a. "fire & forget") |
|
Notification |
At-most-once |
When a uE wishes to notify a specific uE (a.k.a a publication with a destination) |
This special purpose built uEs are required to implement uProtocol and must be present on each uDevice.
uE | Ver | Description |
---|---|---|
uSubscription |
Subscription management service that is responsible for managing subscriptions between uEs to realize the publisher/subscriber design pattern. |
|
uDiscovery |
Discovery of uThings locally, within a domain, and throughout the network. Supports URI resolution (to find where something is located) |
|
uTwin |
Local cache of published events |
uProtocol URIs (UUri) contain a uEntity Identifier (ue_id
) to refer to a particular service type. The ue_id
is a 32 bit unsigned integer of which the least significant 16 bit are used to indicate the service type.
The following section defines sub-ranges of the 16 bit service type address space to be used for different purposes. This will make sure that custom service types defined in a private scope can co-exist with standard uProtocol service types without ambiguities and interference.
ID Range | Purpose |
---|---|
|
Eclipse uProtocol services |
|
|
|
Future use |
|
Vendor specific services |
|
Reserved |
-
uProtocol uE names and numbers MUST be declared in protos and added to up-core-api.