Nitox is a tokio-based client for NATS. We wrote it because the existing library is sync and does not fit our needs.
A lot of features are currently missing, so feel free to contribute and help us building the best Async NATS client ever!
Missing features:
- Find a way to integration test the reconnection mechanism - but it has actually been hand-tested and works
- Auto-pruning of subscriptions being unsubscribed after X messages - It's actually a bug, since a stream stays open albeit sleeping
- Handle verbose mode
- Handle pedantic mode - Should work OOB since we're closely following the protocol (Edit: it does)
- Switch parsing to using
nom- We're not sure we can handle very weird clients; we're fine talking to official ones right now - Add support for NATS Streaming Server - Should be pretty easy with
prostsince we already have the async architecture going on
There's a small extra in the tests/ folder, some of our integration tests rely on a custom NATS server implemented with tokio that only implements a subset of the protocol to fit our needs for the integration testing.
Here: http://docs.rs/nitox
[dependencies]
nitox = "0.1"extern crate nitox;
extern crate futures;
use futures::{prelude::*, future};
use nitox::{NatsClient, NatsClientOptions, NatsError, commands::*};
fn connect_to_nats() -> impl Future<Item = NatsClient, Error = NatsError> {
// Defaults as recommended per-spec, but you can customize them
let connect_cmd = ConnectCommand::builder().build().unwrap();
let options = NatsClientOptions::builder()
.connect_command(connect_cmd)
.cluster_uri("127.0.0.1:4222")
.build()
.unwrap();
NatsClient::from_options(options)
.and_then(|client| {
// Makes the client send the CONNECT command to the server, but it's usable as-is if needed
client.connect()
})
.and_then(|client| {
// Client has sent its CONNECT command and is ready for usage
future::ok(client)
})
}Licensed under either of these:
- Apache License, Version 2.0, (LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0
- MIT license (LICENSE-MIT or https://opensource.org/licenses/MIT)
Standing for Nitric Oxide, an important chemical involved in communication between neurons; It's highly related to the acronym behind NATS, and you should ask the team behind it for the meaning! (or look in the git history of gnatsd's repo)
NATS Server is a simple, high performance open source messaging system for cloud native applications, IoT messaging, and microservices architectures.
More details at NATS.io
Yellow Innovation is the innovation laboratory of the French postal service: La Poste.
We create innovative user experiences and journeys through services with a focus on IoT lately.