use std::{sync::Arc, time::Duration};
use redis_subscribe::RedisSub;
use tokio::time::sleep;
use tokio_stream::StreamExt;
#[tokio::main]
pub async fn main() {
let sub = Arc::new(RedisSub::new("localhost:6379"));
let redis_listener = sub.clone();
tokio::spawn(async move {
let mut stream = redis_listener
.listen()
.await
.expect("failed to connect to Redis");
while let Some(msg) = stream.next().await {
println!("got = {:?}", msg);
}
});
let channel3_sub = sub.clone();
let channel4_sub = sub.clone();
sub.subscribe("channel1".to_string()).await.unwrap();
sub.subscribe("channel2".to_string()).await.unwrap();
tokio::spawn(async move {
channel3_sub
.subscribe("channel3".to_string())
.await
.unwrap()
});
tokio::spawn(async move {
channel4_sub
.subscribe("channel4".to_string())
.await
.unwrap()
});
sleep(Duration::from_millis(5 * 1000)).await;
sub.unsubscribe("channel1".to_string()).await.unwrap();
sleep(Duration::from_millis(10 * 1000)).await;
}