Esempio n. 1
0
 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)
Esempio n. 2
0
 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)
Esempio n. 3
0
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)
Esempio n. 4
0
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)