示例#1
0
 def setUp(self):
     self.io = DecafIOThread()
     self.zmq_actor = ZmqActor()
     self.io.register_actor(self.zmq_actor)
     self.io.start()
     time.sleep(2)
     pass
    def test_channel(self):

        self.con = None

        def do():
            pass

        def do2():
            pass


        def on_exchange_declareok(self):
            print "EXCHANGE OK"

        def callback(channel):
             channel.exchange_declare(on_exchange_declareok,
                                       "trool",
                                       "topic")
        io = DecafIOThread()

        print "here"

        self.con = RabbitConnection(ioloop=io.ioloop)
        self.con.run()

        io.start()

        time.sleep(5)
        self.con.new_channel(callback)
示例#3
0
class MyTestCase(unittest.TestCase):
    def setUp(self):
        self.io = DecafIOThread()
        self.zmq_actor = ZmqActor()
        self.io.register_actor(self.zmq_actor)
        self.io.start()
        time.sleep(2)
        pass

    def test_something(self):

        socket = self.zmq_actor.new_socket(zmq.DEALER)

        port = socket.bind_to_random_port("tcp://127.0.0.1")

        print port
        print socket.type

        socket2 = self.zmq_actor.new_socket(zmq.DEALER)

        succ = socket2.connect("tcp://127.0.0.1:{0}".format(port))

        print succ

        succ = socket2.send_string("moin")

        print succ

        recv = socket.recv_string()
        print "Recieved", recv

        i = raw_input()
示例#4
0
    def test_channel(self):

        self.con = None

        def do():
            pass

        def do2():
            pass

        def on_exchange_declareok(self):
            print "EXCHANGE OK"

        def callback(channel):
            channel.exchange_declare(on_exchange_declareok, "trool", "topic")

        io = DecafIOThread()

        print "here"

        self.con = RabbitConnection(ioloop=io.ioloop)
        self.con.run()

        io.start()

        time.sleep(5)
        self.con.new_channel(callback)
示例#5
0
class MyTestCase(unittest.TestCase):

    def setUp(self):
        self.io = DecafIOThread()
        self.zmq_actor = ZmqActor()
        self.io.register_actor(self.zmq_actor)
        self.io.start()
        time.sleep(2)
        pass

    def test_something(self):



            socket = self.zmq_actor.new_socket(zmq.DEALER)

            port = socket.bind_to_random_port("tcp://127.0.0.1")

            print port
            print socket.type

            socket2 = self.zmq_actor.new_socket(zmq.DEALER)

            succ = socket2.connect("tcp://127.0.0.1:{0}".format(port))

            print succ

            succ = socket2.send_string("moin")

            print succ

            recv = socket.recv_string()
            print "Recieved", recv

            i = raw_input()
示例#6
0
    def test_consumer(self):
        def on_setup_done(tag=None):
            print " setup done"
            #con.stop()

        def method(*args, **kwargs):
            print "trololololololol"

        io = DecafIOThread()
        con = RabbitConnection(ioloop=io.ioloop)
        con.run()
        io.setDaemon(True)
        io.start()
        consumer = AsyncConsumer(con,
                                 "TheQueue",
                                 method,
                                 on_setup_done=on_setup_done,
                                 exchange="trool",
                                 exchange_type="topic",
                                 routing_key="trololol")
        try:
            i = raw_input("")
        except:
            print "signal"
            io.stop_ioloop()
示例#7
0
 def setUp(self):
     self.io = DecafIOThread()
     self.zmq_actor = ZmqActor()
     self.io.register_actor(self.zmq_actor)
     self.io.start()
     time.sleep(2)
     pass
示例#8
0
    def __init__(self, host_url=u'amqp://127.0.0.1:5672', logger=None, ioloop=None, parameters=None, on_connected=None):
        self._consumers = dict()
        self.ready=False
        self.callWhenReady = {}

        self._host_url = host_url
        url = urlparse.urlparse(host_url)

        self._host_ip = url.hostname
        if url.port:
            self._host_port = url.port
        else:
            self._host_port = 5762

        if logger is not None:
            self.logger = logger
        else:
            self.logger = logging.getLogger(__name__)
            ch = logging.StreamHandler()
            ch.setLevel(logging.INFO)
            self.logger.addHandler(ch)

        if ioloop is None:
            self.io = DecafIOThread()
            self._connection = RabbitConnection(host_url, ioloop=self.io.ioloop, logger=self.logger, parameters=parameters, on_connected=on_connected)
            self.io.start()
            self._connection.run()
        else:
            self._connection = RabbitConnection(host_url, ioloop=ioloop, logger=self.logger, parameters=parameters, on_connected=on_connected)
            self._connection.run()
    def __init__(self, loop=None, endpoint="tcp://127.0.0.1:9999", server=True, type=zmq.ROUTER):
        super(ZeroActor, self).__init__()
        self.ctx = Context.instance()

        self.isserver = server
        self.socket = self.ctx.socket(type)

        self.endpoint = endpoint

        if loop is None:
            self.io = DecafIOThread()
            self.io.register_actor(self)
            self.io.start()
            self.run()
        else:
            self.io = loop
            self.io.register_actor(self)
            self.run()
示例#10
0
    def __init__(self,
                 host_url=u'amqp://127.0.0.1:5672',
                 logger=None,
                 ioloop=None,
                 parameters=None,
                 on_connected=None):
        self._consumers = dict()
        self.ready = False
        self.callWhenReady = {}

        self._host_url = host_url
        url = urlparse.urlparse(host_url)

        self._host_ip = url.hostname
        if url.port:
            self._host_port = url.port
        else:
            self._host_port = 5762

        if logger is not None:
            self.logger = logger
        else:
            self.logger = logging.getLogger(__name__)
            ch = logging.StreamHandler()
            ch.setLevel(logging.INFO)
            self.logger.addHandler(ch)

        if ioloop is None:
            self.io = DecafIOThread()
            self._connection = RabbitConnection(host_url,
                                                ioloop=self.io.ioloop,
                                                logger=self.logger,
                                                parameters=parameters,
                                                on_connected=on_connected)
            self.io.start()
            self._connection.run()
        else:
            self._connection = RabbitConnection(host_url,
                                                ioloop=ioloop,
                                                logger=self.logger,
                                                parameters=parameters,
                                                on_connected=on_connected)
            self._connection.run()
示例#11
0
    def test_consumer(self):

        def on_setup_done(tag=None):
            print " setup done"
            #con.stop()


        def method(*args,**kwargs):
            print "trololololololol"

        io = DecafIOThread()
        con = RabbitConnection(ioloop=io.ioloop)
        con.run()
        io.setDaemon(True)
        io.start()
        consumer = AsyncConsumer(con,"TheQueue", method, on_setup_done = on_setup_done, exchange = "trool", exchange_type = "topic", routing_key = "trololol")
        try:
            i = raw_input("")
        except:
            print "signal"
            io.stop_ioloop()
class ZeroActor(DecafActor):
    """
    A minimal Wrapper around a ZeroMQ Socket that turns it into a threadsafe actor.
    """

    def set_handler(self, handler):
        self.handled = True
        self.handler = handler

    def msg_handler(self, socket, events, **kwargs):

        if events & READ:
            msg_type = self.socket.recv_string()
            if msg_type in [JSON, BYTES, PYTHON, STRING]:
                msg = None
                if msg_type == JSON:
                    msg = self.socket.recv_json()
                elif msg_type == BYTES:
                    msg = self.socket.recv()
                elif msg_type == PYTHON:
                    msg = self.socket.recv_pyobj()
                elif msg_type == STRING:
                    msg = self.socket.recv_string()
                self.handler(msg, msg_type)
        else:
            pass

        if events & WRITE:
            pass

        if events & ERROR:
            pass

    @on_loop
    def send(self, msg, msg_type, **kwargs):

        if msg_type in [JSON, BYTES, PYTHON, STRING]:
            self.socket.send_string(msg_type)
            if msg_type == JSON:
                self.socket.send_json(msg, **kwargs)
            elif msg_type == BYTES:
                self.socket.send(msg, **kwargs)
            elif msg_type == PYTHON:
                self.socket.send_pyobj(msg, **kwargs)
            elif msg_type == STRING:
                self.socket.send_string(msg, **kwargs)
        else:
            return

    @on_loop
    def do_recurring(self, function, intervall=1000):

        def make_recurring_call(f):
            def recurring_call():
                f()
                self.io.ioloop.add_timeout(intervall, recurring_call)

            return recurring_call

        f = make_recurring_call(function)
        self.io.ioloop.add_timeout(intervall, f)

    @on_loop
    def run(self):

        if self.isserver:
            self.socket.bind(self.endpoint)
        else:
            self.socket.connect(self.endpoint)

        self.io.ioloop.add_handler(self.socket, self.msg_handler, READ)

    def __init__(self, loop=None, endpoint="tcp://127.0.0.1:9999", server=True, type=zmq.ROUTER):
        super(ZeroActor, self).__init__()
        self.ctx = Context.instance()

        self.isserver = server
        self.socket = self.ctx.socket(type)

        self.endpoint = endpoint

        if loop is None:
            self.io = DecafIOThread()
            self.io.register_actor(self)
            self.io.start()
            self.run()
        else:
            self.io = loop
            self.io.register_actor(self)
            self.run()
示例#13
0
class RabbitMQLayer(object):
    """
    This class is a generic interface to RabbitMQ.
    """
    def __del__(self):
        self.dispose()

    def disposeConsumer(self, tag):
        con = self._consumers.get(tag, None)
        if con:
            con.stop_consuming()

    def dispose(self):
        for tag in self._consumers:
            self.disposeConsumer(tag)
        self._connection.stop()

    def __init__(self,
                 host_url=u'amqp://127.0.0.1:5672',
                 logger=None,
                 ioloop=None,
                 parameters=None,
                 on_connected=None):
        self._consumers = dict()
        self.ready = False
        self.callWhenReady = {}

        self._host_url = host_url
        url = urlparse.urlparse(host_url)

        self._host_ip = url.hostname
        if url.port:
            self._host_port = url.port
        else:
            self._host_port = 5762

        if logger is not None:
            self.logger = logger
        else:
            self.logger = logging.getLogger(__name__)
            ch = logging.StreamHandler()
            ch.setLevel(logging.INFO)
            self.logger.addHandler(ch)

        if ioloop is None:
            self.io = DecafIOThread()
            self._connection = RabbitConnection(host_url,
                                                ioloop=self.io.ioloop,
                                                logger=self.logger,
                                                parameters=parameters,
                                                on_connected=on_connected)
            self.io.start()
            self._connection.run()
        else:
            self._connection = RabbitConnection(host_url,
                                                ioloop=ioloop,
                                                logger=self.logger,
                                                parameters=parameters,
                                                on_connected=on_connected)
            self._connection.run()

    @property
    def getHostIP(self):
        return self._host_ip

    @property
    def getHostPort(self):
        return self._host_port

    def _twisted_ready(self, *args, **kwargs):
        self.ready = True
        for d in self.callWhenReady:
            res = self.callWhenReady[d]()
            if isinstance(res, defer.Deferred):
                res.chainDeferred(d)
            else:
                d.callback(res)

    def createProducer(self):
        def callback(channel):
            d.callback(channel)

        d = defer.Deferred()
        con = self._connection.new_channel(callback)
        return d

    def createConsumer(self,
                       queue_name,
                       consume_method,
                       exchange=None,
                       exchange_type=None,
                       routing_key=None,
                       exclusive=True,
                       tag=None):
        """
        Creates a ansynchrounus consumer which listens on the given Queue.

        :param queue_name:
        :param consume_method:
        :param exchange:
        :param exchange_type:
        :param routing_key:
        :return:
        """
        def on_setup_done(tag=None):
            if tag is not None:
                self._consumers[tag] = con
                result = (tag, queue_name)
                d.callback(result)

        d = defer.Deferred()
        con = AsyncConsumer(self._connection,
                            queue_name,
                            consume_method,
                            amqp_url=self._host_url,
                            on_setup_done=on_setup_done,
                            exchange=exchange,
                            exchange_type=exchange_type,
                            routing_key=routing_key,
                            logger=self.logger,
                            exclusive=exclusive,
                            tag=tag)
        return d
示例#14
0
class RabbitMQLayer(object):
    """
    This class is a generic interface to RabbitMQ.
    """

    def __del__(self):
        self.dispose()

    def disposeConsumer(self, tag):
        con = self._consumers.get(tag, None)
        if con:
            con.stop_consuming()

    def dispose(self):
        for tag in self._consumers:
            self.disposeConsumer(tag)
        self._connection.stop()


    def __init__(self, host_url=u'amqp://127.0.0.1:5672', logger=None, ioloop=None, parameters=None, on_connected=None):
        self._consumers = dict()
        self.ready=False
        self.callWhenReady = {}

        self._host_url = host_url
        url = urlparse.urlparse(host_url)

        self._host_ip = url.hostname
        if url.port:
            self._host_port = url.port
        else:
            self._host_port = 5762

        if logger is not None:
            self.logger = logger
        else:
            self.logger = logging.getLogger(__name__)
            ch = logging.StreamHandler()
            ch.setLevel(logging.INFO)
            self.logger.addHandler(ch)

        if ioloop is None:
            self.io = DecafIOThread()
            self._connection = RabbitConnection(host_url, ioloop=self.io.ioloop, logger=self.logger, parameters=parameters, on_connected=on_connected)
            self.io.start()
            self._connection.run()
        else:
            self._connection = RabbitConnection(host_url, ioloop=ioloop, logger=self.logger, parameters=parameters, on_connected=on_connected)
            self._connection.run()

    @property
    def getHostIP(self):
        return self._host_ip

    @property
    def getHostPort(self):
        return self._host_port

    def _twisted_ready(self, *args, **kwargs):
        self.ready = True
        for d in self.callWhenReady:
            res = self.callWhenReady[d]()
            if isinstance(res, defer.Deferred):
                res.chainDeferred(d)
            else:
                d.callback(res)


    def createProducer(self):

        def callback(channel):
            d.callback(channel)

        d = defer.Deferred()
        con = self._connection.new_channel(callback)
        return d


    def createConsumer(self, queue_name, consume_method, exchange = None, exchange_type = None, routing_key = None, exclusive=True, tag=None):
        """
        Creates a ansynchrounus consumer which listens on the given Queue.

        :param queue_name:
        :param consume_method:
        :param exchange:
        :param exchange_type:
        :param routing_key:
        :return:
        """
        def on_setup_done(tag=None):
            if tag is not None:
                self._consumers[tag] = con
                result = (tag,queue_name)
                d.callback(result)

        d = defer.Deferred()
        con = AsyncConsumer(self._connection, queue_name, consume_method, amqp_url=self._host_url, on_setup_done = on_setup_done, exchange = exchange, exchange_type = exchange_type, routing_key = routing_key, logger=self.logger, exclusive=exclusive, tag=tag)
        return d