def reconnect(self): self.connection = Connection(host=self.host, virtual_host=self.vhost, userid=self.username, password=self.password) qa = dict(durable=False, auto_delete=False) self.channel = self.connection.channel() self.channel.basic_qos(0, self.prefetch_count, False) self.channel.queue_declare(queue=self.queue, exclusive=False, **qa) self.channel.exchange_declare(self.exchange, type="fanout", **qa) self.channel.queue_bind(queue=self.queue, exchange=self.exchange)
def reconnect(self): self.connection = Connection( host=self.host, virtual_host=self.vhost, userid=self.username, password=self.password ) qa = dict(durable=False, auto_delete=False) self.channel = self.connection.channel() self.channel.basic_qos(0, self.prefetch_count, False) self.channel.queue_declare(queue=self.queue,exclusive=False, **qa) self.channel.exchange_declare(self.exchange, type="fanout", **qa) self.channel.queue_bind(queue=self.queue, exchange=self.exchange)
class Amqp(object): def __init__(self, **kw): config = merge(defaults, settings.like("amqp"), kw) required = ("port", "username", "password", "host", "vhost", "exchange", "queue") require(self, config, required) self.__dict__.update(config) self.config = config self.reconnect() def reconnect(self): self.connection = Connection(host=self.host, virtual_host=self.vhost, userid=self.username, password=self.password) qa = dict(durable=False, auto_delete=False) self.channel = self.connection.channel() self.channel.basic_qos(0, self.prefetch_count, False) self.channel.queue_declare(queue=self.queue, exclusive=False, **qa) self.channel.exchange_declare(self.exchange, type="fanout", **qa) self.channel.queue_bind(queue=self.queue, exchange=self.exchange) @autoreconnect def status(self, cached=True): status = self.channel.queue_declare(queue=self.queue, exclusive=False, durable=False, auto_delete=False) name, message_count, consumer_count = status return dict(name=status[0], messages=status[1], consumers=status[2]) @autoreconnect def publish(self, message, exchange=None): self.channel.basic_publish(amqp.Message(message), exchange or self.exchange) @autoreconnect def get(self, queue=None): """Attempt to get something from a queue. If queue is None, uses the default queue for this client.""" m = self.channel.basic_get(queue or self.queue) if m is not None: self.channel.basic_ack(m.delivery_tag) return m def poll(self, queue=None, timeout=None, every=0.1): """Poll every `every` seconds for a message on queue.""" start = time() m = self.get(queue) while m is None: sleep(every) now = time() if timeout and now - start >= timeout: return m m = self.get(queue) return m def consume(self, callback, queue=None, no_ack=True): """Start consuming messages from a channel. Returns the channel. Use AmqpClient.cancel() to cancel this consuming.""" self.tag = self.channel.basic_consume(queue or self.queue, callback=callback, no_ack=no_ack) return self.channel def cancel(self, tag=None): """Cancel consuming.""" self.channel.basic_cancel(tag or self.tag)
class Amqp(object): def __init__(self, **kw): config = merge(defaults, settings.like("amqp"), kw) required = ("port", "username", "password", "host", "vhost", "exchange", "queue") require(self, config, required) self.__dict__.update(config) self.config = config self.reconnect() def reconnect(self): self.connection = Connection( host=self.host, virtual_host=self.vhost, userid=self.username, password=self.password ) qa = dict(durable=False, auto_delete=False) self.channel = self.connection.channel() self.channel.basic_qos(0, self.prefetch_count, False) self.channel.queue_declare(queue=self.queue,exclusive=False, **qa) self.channel.exchange_declare(self.exchange, type="fanout", **qa) self.channel.queue_bind(queue=self.queue, exchange=self.exchange) @autoreconnect def status(self, cached=True): status = self.channel.queue_declare(queue=self.queue, exclusive=False, durable=False, auto_delete=False) name, message_count, consumer_count = status return dict(name=status[0], messages=status[1], consumers=status[2]) @autoreconnect def publish(self, message, exchange=None): self.channel.basic_publish(amqp.Message(message), exchange or self.exchange) @autoreconnect def get(self, queue=None): """Attempt to get something from a queue. If queue is None, uses the default queue for this client.""" m = self.channel.basic_get(queue or self.queue) if m is not None: self.channel.basic_ack(m.delivery_tag) return m def poll(self, queue=None, timeout=None, every=0.1): """Poll every `every` seconds for a message on queue.""" start = time() m = self.get(queue) while m is None: sleep(every) now = time() if timeout and now - start >= timeout: return m m = self.get(queue) return m def consume(self, callback, queue=None, no_ack=True): """Start consuming messages from a channel. Returns the channel. Use AmqpClient.cancel() to cancel this consuming.""" self.tag = self.channel.basic_consume(queue or self.queue, callback=callback, no_ack=no_ack) return self.channel def cancel(self, tag=None): """Cancel consuming.""" self.channel.basic_cancel(tag or self.tag)