feat: handle worker groups with redis

This commit is contained in:
Ruben Fiszel
2023-07-26 17:33:46 +02:00
parent 35ea4f5f04
commit ea8a456acc
4 changed files with 35 additions and 22 deletions
@@ -5,8 +5,8 @@ use rsmq_async::{RedisBytes, RsmqConnection};
use sqlx::{Postgres, Transaction};
pub enum RedisOp {
SendMessage(RedisBytes, Option<chrono::DateTime<chrono::Utc>>),
DeleteMessage(String),
SendMessage(RedisBytes, Option<chrono::DateTime<chrono::Utc>>, String),
DeleteMessage(String, String),
}
unsafe impl Send for RedisOp {}
@@ -14,17 +14,17 @@ unsafe impl Send for RedisOp {}
impl RedisOp {
pub async fn apply<R: RsmqConnection>(self, rsmq: &mut R) -> Result<(), rsmq_async::RsmqError> {
match self {
RedisOp::SendMessage(bytes, time) => {
RedisOp::SendMessage(bytes, time, queue) => {
rsmq.send_message(
"main_queue",
&queue,
bytes,
time.map(|t| (t - chrono::Utc::now()).num_seconds())
.and_then(|e| e.try_into().ok()),
)
.await?;
}
RedisOp::DeleteMessage(id) => {
rsmq.delete_message("main_queue", &id).await?;
RedisOp::DeleteMessage(id, queue) => {
rsmq.delete_message(&queue, &id).await?;
}
};
@@ -56,13 +56,14 @@ impl<R: RsmqConnection> RedisTransaction<R> {
&mut self,
bytes: E,
delay_until: Option<chrono::DateTime<chrono::Utc>>,
queue: String,
) {
self.queued_ops
.push(RedisOp::SendMessage(bytes.into(), delay_until))
.push(RedisOp::SendMessage(bytes.into(), delay_until, queue))
}
pub fn delete_message(&mut self, id: String) {
self.queued_ops.push(RedisOp::DeleteMessage(id))
pub fn delete_message(&mut self, id: String, queue: String) {
self.queued_ops.push(RedisOp::DeleteMessage(id, queue))
}
}