Getting Started • Configuration Setup • Running the Pub Sub Service • Running in a Container
The Pub Sub Service is a gRPC service that provides publish/subscribe functionality for applications within the vehicle, including Eclipse Ibeji and Eclipse Chariott. The service can register with Chariott, making it easily discoverable by other applications. The service provides the ability to dynamically create and manage topics. Additionally, the service is designed to allow for the replacement of the default messaging broker as long as the broker meets certain requirements (see Bring Your Own Broker).
This guide uses apt
as the package manager in the examples. You may need to substitute your own
package manager in place of apt
when going through these steps.
-
Install gcc:
sudo apt install gcc
NOTE: Rust needs gcc's linker.
-
Install cmake:
sudo apt install cmake
-
Install git and rust:
sudo apt update sudo apt install -y git snapd sudo snap install rustup --classic
NOTE: The rust toolchain version is managed by the rust-toolchain.toml file, so once you install rustup there is no need to manually install a toolchain or set a default.
-
Install OpenSSL:
sudo apt install pkg-config sudo apt install libssl-dev
-
Install Protobuf Compiler:
sudo apt install -y protobuf-compiler
NOTE: The protobuf compiler is needed for building the project.
-
Install the default messaging broker:
A messaging broker is required to use this service, and currently the service was developed with the Mosquitto MQTT messaging broker, please see this section for more information on how to integrate a different broker.
To install the broker, refer to https://mosquitto.org/download/.
The repo has a submodule chariott that provides proto files for Chariott integration. To ensure that these files are included, please use the following command when cloning the repo:
git clone --recurse-submodules https://github.com/eclipse-chariott/Agemo
Run the following in the enlistment's root directory to build everything in the workspace once you have installed the prerequisites:
cargo build
After successfully building the service, you can run all of the unit tests. To do this go to the enlistment's root directory and run:
cargo test
The service configuration is defined in .agemo/config. The default configuration files will allow a user to run the service without any modification. Please read config_overrides for more information on how to modify the service's configuration.
Below are the steps to run the Pub Sub Service in its most simple form. The service is gRPC based, and the quickest way to interact with the services is through the use of the grpcurl command line tool.
The messaging broker must be started first, this can be done with the following command from the enlistment's root in a terminal window:
mosquitto -c ./pub-sub-service/src/connectors/mosquitto.conf
Then start up the Pub Sub Service project with the following command from the enlistment's root in a separate terminal window:
cargo run -p pub-sub-service
The service implements two gRPC methods defined in pubsub.proto. To create a topic, execute the below command in another terminal window:
grpcurl -proto ./proto/pubsub/v1/pubsub.proto -plaintext -d @ 0.0.0.0:50051 pubsub.PubSub/CreateTopic <<EOF
{
"publisherId": "simple_publisher_call",
"managementCallback": "https://example_management.address",
"managementProtocol": "grpc"
}
EOF
An example of an expected response would look like:
{
"generatedTopic": "09285f6c-9a86-49db-9159-0d91f8f4d3bb",
"brokerUri": "mqtt://0.0.0.0:1883",
"brokerProtocol": "mqtt"
}
NOTE: The service provides the generated topic name and the broker information to directly connect to.
This created topic could then be deleted with the following command:
grpcurl -proto ./proto/pubsub/v1/pubsub.proto -plaintext -d @ 0.0.0.0:50051 pubsub.PubSub/DeleteTopic <<EOF
{
"topic": "09285f6c-9a86-49db-9159-0d91f8f4d3bb"
}
EOF
The expected response is an empty set of brackets:
{
}
These two methods are used by a publisher to dynamically manage a topic. Please refer to this documentation for more information on how to the service is utilized. You can see more full featured examples in Running the Simple Samples.
Please refer to the following links for how to build and run the service in a OCI container:
This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft trademarks or logos is subject to and must follow Microsoft's Trademark & Brand Guidelines. Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. Any use of third-party trademarks or logos are subject to those third-party's policies.