Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/harporoeder/tokio-nsq
A Rust NSQ client built on Tokio
https://github.com/harporoeder/tokio-nsq
Last synced: 3 months ago
JSON representation
A Rust NSQ client built on Tokio
- Host: GitHub
- URL: https://github.com/harporoeder/tokio-nsq
- Owner: harporoeder
- License: bsd-3-clause
- Created: 2020-07-25T02:19:41.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2023-06-28T02:55:50.000Z (over 1 year ago)
- Last Synced: 2024-07-14T21:21:55.357Z (4 months ago)
- Language: Rust
- Homepage:
- Size: 160 KB
- Stars: 63
- Watchers: 4
- Forks: 10
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# Tokio NSQ
![GitHub Actions](https://github.com/harporoeder/tokio-nsq/workflows/Rust/badge.svg)
![crates.io](https://img.shields.io/crates/v/tokio-nsq.svg)A Rust [NSQ](https://nsq.io/) client built on [Tokio](https://github.com/tokio-rs/tokio). Tokio NSQ aims to be a feature complete NSQ client implementation.
Tokio NSQ is available as a [cargo package](https://crates.io/crates/tokio-nsq), and API documentation is available on [docs.rs](https://docs.rs/tokio-nsq/latest/tokio_nsq/).
## Versioning
This project follows strict semantic versioning. While pre `1.0.0` breaking changes have only a minor version bump.
## Basic consumer example
```rust
let topic = NSQTopic::new("names").unwrap();
let channel = NSQChannel::new("first").unwrap();let mut addresses = HashSet::new();
addresses.insert("http://127.0.0.1:4161".to_string());let mut consumer = NSQConsumerConfig::new(topic, channel)
.set_max_in_flight(15)
.set_sources(
NSQConsumerConfigSources::Lookup(
NSQConsumerLookupConfig::new().set_addresses(addresses)
)
)
.build();let mut message = consumer.consume_filtered().await.unwrap();
let message_body_str = std::str::from_utf8(&message.body).unwrap();
println!("message body = {}", message_body_str);message.finish();
```## Basic producer example
```rust
let topic = NSQTopic::new("names").unwrap();let mut producer = NSQProducerConfig::new("127.0.0.1:4150").build();
// Wait until a connection is initialized
assert_matches!(producer.consume().await.unwrap(), NSQEvent::Healthy());
// Publish a single message
producer.publish(&topic, b"alice1".to_vec()).unwrap();
// Wait until the message is acknowledged by NSQ
assert_matches!(producer.consume().await.unwrap(), NSQEvent::Ok());
```## Features
- [x] Subscriptions
- [x] Publication
- [x] NSQLookupd based discovery.
- [x] Message requeue backoff
- [X] NSQD TLS negotiation
- [x] Unverified server certificates
- [X] Custom certificate authority
- [X] Client certificates
- [x] Deflate NSQD compression
- [X] Snappy NSQD compression
- [X] Sampling
- [X] Auth