如何使用kombu确认和删除Redis中的条目

时间:2019-05-17 06:50:55

标签: python redis kombu

这是使用redis和kombu的发布/订阅模型。我可以使用kombu确认键/值,但是确认该条目后,该条目将被删除。我想要这样的选项,键/值应标记为已读(可能正在使用标志选项),并且在消费者成功使用它之后,应发送确认消息以删除该条目。同时,在将该条目标记为已读之后,该条目不应对其他使用者可用。

我可以使用kombu确认消息,但是条目将被删除。如果使用者无法处理该消息或该消息已崩溃,则键/值将丢失。因此,我希望有两个选项,例如键/值应标记为已读,并且只有在消费者成功使用键之后,才应删除该条目。

对于连接,排队

from kombu import Connection

class Logger(object):

    def __init__(self, connection, queue_name='mail_qu',
            serializer='json', compression=None):
        self.queue = connection.SimpleQueue(queue_name)
        self.serializer = serializer
        self.compression = compression

    def log(self, message):
        self.queue.put({'message': message},serializer=self.serializer,
                        compression=self.compression)

    def process(self):
        while(True):
            log_message = self.queue.get(block=True, timeout=1)
            entry = log_message.payload # deserialized data.

            log_message.ack() # remove message from queue

            print("callback",aa)
    def close(self):
        self.queue.close()

生产者被调用。...

from kombu import Connection
from mail_qu import Logger
if __name__ == '__main__':
    from contextlib import closing

    with Connection('redis://localhost:6379') as conn:
        with closing(Logger(conn)) as logger:


            logger.log('keyyyy')

消费者被称为。...

from kombu import Connection
from mail_qu import Logger
import time
if __name__ == '__main__':
    from contextlib import closing

    with Connection('redis://localhost:6379') as conn:
        with closing(Logger(conn)) as logger:

            logger.process()

使用log_message.ack(),可以在阅读消息后成功删除条目。但是我想要这样的选项,即在读取消息后将其标记为已读取,并且在消费者消费者成功之后应删除该条目。

0 个答案:

没有答案