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