class NSQProxy: def __init__(self, topic, nsqds): self.topic = topic self.writer_pool = HostPool([Writer([nsqd]) for nsqd in nsqds]) def relay(self, nsq_message): nsq_message.enable_async() writer = self.writer_pool.get() callback = functools.partial(self._on_message_response, nsq_message=nsq_message, writer=writer) writer.pub(self.topic, nsq_message.body, callback) def _on_message_response(self, conn, data, nsq_message, writer): if isinstance(data, Error): logging.warning("requeuing message: %s", nsq_message.body) self.writer_pool.failed(writer) nsq_message.requeue() else: self.writer_pool.success(writer) nsq_message.finish()
class NSQProxy: def __init__(self, topic, nsqds): self.topic = topic self.writer_pool = HostPool([Writer([nsqd]) for nsqd in nsqds]) def relay(self, nsq_message): nsq_message.enable_async() writer = self.writer_pool.get() callback = functools.partial( self._on_message_response, nsq_message=nsq_message, writer=writer) writer.pub(self.topic, nsq_message.body, callback) def _on_message_response(self, conn, data, nsq_message, writer): if isinstance(data, Error): logging.warning("requeuing message: %s", nsq_message.body) self.writer_pool.failed(writer) nsq_message.requeue() else: self.writer_pool.success(writer) nsq_message.finish()