我正在使用Kombu on Redis整合生产者/消费者设置,但我遇到了一个问题。如果我启动一个消费者,然后启动范围(10000)的生产者,我可以确认生产者已排队所有10k项目,但消费者不会收到所有10k项目。使用Kombu或Redis有没有我不知道的限制?它似乎与范围(9000)正常工作,并且所有键/ ack已正确排干。
class ProduceConsume(object):
def __init__(self, exchange_name):
exchange = Exchange(exchange_name, type='fanout', durable=False)
self.queue_name = 'test_queue'
self.queue = Queue(self.queue_name, exchange)
def producer(self, inp):
with BrokerConnection("redis://localhost:6379/15") as conn:
with conn.SimpleQueue(self.queue) as queue:
for payload in inp:
queue.put(str(payload).zfill(5))
print(str(payload).zfill(5))
def consumer(self):
with BrokerConnection("redis://localhost:6379/15") as conn:
with conn.SimpleQueue(self.queue) as queue:
while True:
message = queue.get()
message.ack()
print(message.payload)
答案 0 :(得分:0)
不是完整的答案,但使用RabbitMQ而不是Redis没有消息丢失问题。可能是由于非直接交流的问题?随意提交一个更明智的答案,但希望这可以帮助别人。
更新:这是Kombu的一个错误;见https://github.com/celery/kombu/issues/593