Crates.io | xorc-notifications |
lib.rs | xorc-notifications |
version | 0.1.0 |
source | src |
created_at | 2018-10-31 17:55:05.877051 |
updated_at | 2018-10-31 17:55:05.877051 |
description | A consumer to send push notifications from Kafka |
homepage | https://github.com/xray-tech/xorc-notifications |
repository | https://github.com/xray-tech/xorc-notifications |
max_upload_size | |
id | 93843 |
size | 161,859 |
A collection of services consuming PushNotification events to send push notifications to apns2/fcm/web push and Application events to receive configuration.
The systems are by default multi-tenant for sending push notifications to multiple different applications.
The systems are written with Rust and it should always be possible to compile with the latest stable version. The de-facto way of getting the latest Rust is with rustup:
> curl https://sh.rustup.rs -sSf | sh
> rustup update
> rustup default stable
To check that everything works:
> rustc --version
rustc 1.30.0 (da5f414c2 2018-10-24)
> cargo --version
cargo 1.30.0 (36d96825d 2018-10-24)
Some of the crates used in the project have dependencies to certain system libraries and tools, for Ubuntu 18.04 you get them with:
> sudo apt install build-essential libssl-dev automake ca-certificates libffi-dev protobuf-compiler
The project uses Protocol
Buffers for event schemas.
cargo build
should generate the corresponding Rust structs to be used in the
code. By default the protobuf classes are included as a submodule, which must be
imported to the project tree:
> git submodule update --init
Configuration examples for all the consumers are in config. Create a copy from an example config removing the ending, and modify it to suit your test setup.
Running apns2:
> env CONFIG=./config/apns2.toml cargo run --bin apns2
Running fcm:
> env CONFIG=./config/fcm.toml cargo run --bin fcm
Running web_push:
> env CONFIG=./config/web_push.toml cargo run --bin web_push
Running http_requester:
> env CONFIG=./config/http_requester.toml cargo run --bin http_requester
The examples directory contains helper scripts for testing the consumers.
To build them:
cargo build --release --examples
The executables are in target/release
directory.
The system is configuration is handled through a toml file and a environment variable.
variable | description | example |
---|
CONFIG
| The configuration file location | /etc/xorc-notifications/config.toml
LOG_FORMAT
| Log output format | text
or json
, default: text
RUST_ENV
| The program environment | test
, development
, staging
or production
, default: development
section | key | description | example |
---|
[kafka]
| input_topic
| Notification input topic | "production.notifications.apns"
[kafka]
| config_topic
| Application configuration topic | "production.applications"
[kafka]
| output_topic
| Notification response topic | "production.oam"
[kafka]
| group_id
| Consumer group ID | "production.consumers.apns"
[kafka]
| brokers
| Comma-separated list of Kafka brokers | "kafka1:9092,kafka2:9092"
[kafka]
| consumer_type
| Decides the input protobuf deserialization | push_notification
for PushNotification
, http_request
for HttpRequest
input_topic
,
requesting the external service with a client, parsing the response and
responding back to the caller.EventHandler
(request_consumer.rs) and respond with
ResponseProducer
(response_producer.rs).config_topic
.