#stream #redis #消费者组

redis-stream

从Redis流中读取和消费数据

2个版本

0.1.2 2021年3月10日
0.1.1 2020年11月9日

#893 in 数据库接口

MIT许可证

31KB
528

Redis Stream

Build Status

一个用于从Redis流中读取数据的Rust高级库。

本项目是将Elixir的Redix.Stream库稍作修改后移植到Rust,并作为redis-rs的扩展。

我们在Klaxit中使用它来处理来自Heroku的Logplex的合并日志流,并在用户注意到之前自动修复一些在Heroku上偶尔出现的问题。

当需要时,我们还用它来扩展一些服务。

它已成功运行超过6个月。

安装

该Crate名为redis-stream,您可以通过Cargo依赖它

[dependencies]
redis-stream = "0.1.2"

文档

该库的文档可以在docs.rs/redis-stream找到。

基本用法

use redis_stream::consumer::{Consumer, ConsumerOpts, Message};

let redis_url =
  std::env::var("REDIS_URL").unwrap_or_else(|_| "redis://127.0.0.1:6379".to_string());

let mut redis = redis::Client::open(redis_url)
  .expect("client")
  .get_connection()
  .expect("connection");

// Message handler
let handler = |_id: &str, message: &Message| {
  // do something
  Ok(())
};

// Consumer config
let opts = ConsumerOpts::default();
let mut consumer = Consumer::init(&mut redis, "my-stream", handler, opts).expect("consumer");

// Consume some messages through handler.
consumer.consume().expect("consume messages");

// Clean up redis
use redis::Commands;
redis.del::<&str, bool>("my-stream").expect("del");

消费者组用法

use redis_stream::consumer::{Consumer, ConsumerOpts, Message};

let redis_url =
  std::env::var("REDIS_URL").unwrap_or_else(|_| "redis://127.0.0.1:6379".to_string());

let mut redis = redis::Client::open(redis_url)
  .expect("client")
  .get_connection()
  .expect("connection");

// Message handler
let handler = |_id: &str, message: &Message| {
  // do something
  Ok(())
};

// Consumer config
let opts = ConsumerOpts::default().group("my-group", "worker.1");
let mut consumer = Consumer::init(&mut redis, "my-stream-2", handler, opts).unwrap();

// Consume some messages through handler.
consumer.consume().expect("consume messages");

// Clean up redis
use redis::Commands;
redis.xgroup_destroy::<&str, &str, bool>("my-stream-2", "my-group").expect("xgroup destroy");
redis.del::<&str, bool>("my-stream-2").expect("del");

开发

如果您想开发该库,makefile提供了一些命令。

运行make help获取更多信息。

对于测试,如果需要启动本地Redis实例,也提供了一个docker-compose.yml文件

$ docker-compose up -d
$ make test

许可证

请参阅LICENSE

依赖关系

~4MB
~102K SLoC