예제 #1
0
    def setUp(self):
        super(ZmqBaseTestCase, self).setUp()
        self.messaging_conf.transport_driver = 'zmq'
        zmq_options.register_opts(self.conf)

        # Set config values
        self.internal_ipc_dir = self.useFixture(fixtures.TempDir()).path
        kwargs = {'rpc_zmq_bind_address': '127.0.0.1',
                  'rpc_zmq_host': '127.0.0.1',
                  'rpc_zmq_ipc_dir': self.internal_ipc_dir,
                  'use_pub_sub': False,
                  'use_router_proxy': False,
                  'rpc_zmq_matchmaker': 'dummy'}
        self.config(group='oslo_messaging_zmq', **kwargs)
        self.config(rpc_response_timeout=5)

        # Get driver
        transport = oslo_messaging.get_transport(self.conf)
        self.driver = transport._driver

        self.listener = TestServerListener(self.driver)

        self.addCleanup(
            StopRpc(self, [('listener', 'stop'), ('driver', 'cleanup')])
        )
예제 #2
0
    def __init__(self,
                 conf,
                 url,
                 default_exchange=None,
                 allowed_remote_exmods=None):
        """Construct ZeroMQ driver.

        Initialize driver options.

        Construct matchmaker - pluggable interface to targets management
        Name Service

        Construct client and server controllers

        :param conf: oslo messaging configuration object
        :type conf: oslo_config.CONF
        :param url: transport URL
        :type url: TransportUrl
        :param default_exchange: Not used in zmq implementation
        :type default_exchange: None
        :param allowed_remote_exmods: remote exception passing options
        :type allowed_remote_exmods: list
        """
        zmq = zmq_async.import_zmq()
        if zmq is None:
            raise ImportError(_LE("ZeroMQ is not available!"))

        zmq_options.register_opts(conf)
        self.conf = conf
        self.allowed_remote_exmods = allowed_remote_exmods

        self.matchmaker = driver.DriverManager(
            'oslo.messaging.zmq.matchmaker',
            self.get_matchmaker_backend(self.conf, url),
        ).driver(self.conf, url=url)

        client_cls = zmq_client.ZmqClientProxy
        if conf.oslo_messaging_zmq.use_pub_sub and not \
                conf.oslo_messaging_zmq.use_router_proxy:
            client_cls = zmq_client.ZmqClientMixDirectPubSub
        elif not conf.oslo_messaging_zmq.use_pub_sub and not \
                conf.oslo_messaging_zmq.use_router_proxy:
            client_cls = zmq_client.ZmqClientDirect

        self.client = LazyDriverItem(client_cls, self.conf, self.matchmaker,
                                     self.allowed_remote_exmods)

        self.notifier = LazyDriverItem(client_cls, self.conf, self.matchmaker,
                                       self.allowed_remote_exmods)

        super(ZmqDriver, self).__init__(conf, url, default_exchange,
                                        allowed_remote_exmods)
예제 #3
0
    def __init__(self, conf, url, default_exchange=None,
                 allowed_remote_exmods=None):
        """Construct ZeroMQ driver.

        Initialize driver options.

        Construct matchmaker - pluggable interface to targets management
        Name Service

        Construct client and server controllers

        :param conf: oslo messaging configuration object
        :type conf: oslo_config.CONF
        :param url: transport URL
        :type url: TransportUrl
        :param default_exchange: Not used in zmq implementation
        :type default_exchange: None
        :param allowed_remote_exmods: remote exception passing options
        :type allowed_remote_exmods: list
        """
        zmq = zmq_async.import_zmq()
        if zmq is None:
            raise ImportError(_LE("ZeroMQ is not available!"))

        zmq_options.register_opts(conf)
        self.conf = conf
        self.allowed_remote_exmods = allowed_remote_exmods

        self.matchmaker = driver.DriverManager(
            'oslo.messaging.zmq.matchmaker',
            self.get_matchmaker_backend(self.conf, url),
        ).driver(self.conf, url=url)

        client_cls = zmq_client.ZmqClientProxy
        if conf.oslo_messaging_zmq.use_pub_sub and not \
                conf.oslo_messaging_zmq.use_router_proxy:
            client_cls = zmq_client.ZmqClientMixDirectPubSub
        elif not conf.oslo_messaging_zmq.use_pub_sub and not \
                conf.oslo_messaging_zmq.use_router_proxy:
            client_cls = zmq_client.ZmqClientDirect

        self.client = LazyDriverItem(
            client_cls, self.conf, self.matchmaker,
            self.allowed_remote_exmods)

        self.notifier = LazyDriverItem(
            client_cls, self.conf, self.matchmaker,
            self.allowed_remote_exmods)

        super(ZmqDriver, self).__init__(conf, url, default_exchange,
                                        allowed_remote_exmods)
예제 #4
0
    def setUp(self, conf=cfg.CONF):
        super(SkipIfNoTransportURL, self).setUp(conf=conf)

        driver = os.environ.get("TRANSPORT_DRIVER")
        if driver:
            self.url = os.environ.get('PIFPAF_URL')
            if driver == "pika" and self.url:
                self.url = self.url.replace("rabbit://", "pika://")
        else:
            self.url = os.environ.get('TRANSPORT_URL')

        if not self.url:
            self.skipTest("No transport url configured")

        transport_url = oslo_messaging.TransportURL.parse(conf, self.url)

        zmq_options.register_opts(conf, transport_url)

        zmq_matchmaker = os.environ.get('ZMQ_MATCHMAKER')
        if zmq_matchmaker:
            self.config(rpc_zmq_matchmaker=zmq_matchmaker,
                        group="oslo_messaging_zmq")
        zmq_ipc_dir = os.environ.get('ZMQ_IPC_DIR')
        if zmq_ipc_dir:
            self.config(group="oslo_messaging_zmq",
                        rpc_zmq_ipc_dir=zmq_ipc_dir)
        zmq_redis_port = os.environ.get('ZMQ_REDIS_PORT')
        if zmq_redis_port:
            self.config(port=zmq_redis_port,
                        check_timeout=10000,
                        wait_timeout=1000,
                        group="matchmaker_redis")
        zmq_use_pub_sub = os.environ.get('ZMQ_USE_PUB_SUB')
        zmq_use_router_proxy = os.environ.get('ZMQ_USE_ROUTER_PROXY')
        zmq_use_acks = os.environ.get('ZMQ_USE_ACKS')
        self.config(use_pub_sub=zmq_use_pub_sub,
                    use_router_proxy=zmq_use_router_proxy,
                    rpc_use_acks=zmq_use_acks,
                    group='oslo_messaging_zmq')
        zmq_use_dynamic_connections = \
            os.environ.get('ZMQ_USE_DYNAMIC_CONNECTIONS')
        self.config(use_dynamic_connections=zmq_use_dynamic_connections,
                    group='oslo_messaging_zmq')

        kafka_options.register_opts(conf, transport_url)

        self.config(producer_batch_size=0,
                    group='oslo_messaging_kafka')
예제 #5
0
    def setUp(self, conf=cfg.CONF):
        super(SkipIfNoTransportURL, self).setUp(conf=conf)

        driver = os.environ.get("TRANSPORT_DRIVER")
        if driver:
            self.url = os.environ.get('PIFPAF_URL')
            if driver == "pika" and self.url:
                self.url = self.url.replace("rabbit://", "pika://")
        else:
            self.url = os.environ.get('TRANSPORT_URL')

        if not self.url:
            self.skipTest("No transport url configured")

        zmq_options.register_opts(conf)

        zmq_matchmaker = os.environ.get('ZMQ_MATCHMAKER')
        if zmq_matchmaker:
            self.config(rpc_zmq_matchmaker=zmq_matchmaker,
                        group="oslo_messaging_zmq")
        zmq_ipc_dir = os.environ.get('ZMQ_IPC_DIR')
        if zmq_ipc_dir:
            self.config(group="oslo_messaging_zmq",
                        rpc_zmq_ipc_dir=zmq_ipc_dir)
        zmq_redis_port = os.environ.get('ZMQ_REDIS_PORT')
        if zmq_redis_port:
            self.config(port=zmq_redis_port,
                        check_timeout=10000,
                        wait_timeout=1000,
                        group="matchmaker_redis")
        zmq_use_pub_sub = os.environ.get('ZMQ_USE_PUB_SUB')
        zmq_use_router_proxy = os.environ.get('ZMQ_USE_ROUTER_PROXY')
        zmq_use_acks = os.environ.get('ZMQ_USE_ACKS')
        self.config(use_pub_sub=zmq_use_pub_sub,
                    use_router_proxy=zmq_use_router_proxy,
                    rpc_use_acks=zmq_use_acks,
                    group='oslo_messaging_zmq')
        zmq_use_dynamic_connections = \
            os.environ.get('ZMQ_USE_DYNAMIC_CONNECTIONS')
        self.config(use_dynamic_connections=zmq_use_dynamic_connections,
                    group='oslo_messaging_zmq')

        kafka_options.register_opts(conf)

        self.config(producer_batch_size=0,
                    group='oslo_messaging_kafka')
예제 #6
0
def main():

    conf = cfg.CONF
    opt_group = cfg.OptGroup(name='zmq_proxy_opts',
                             title='ZeroMQ proxy options')
    conf.register_opts(zmq_proxy.zmq_proxy_opts, group=opt_group)
    zmq_options.register_opts(conf)
    zmq_proxy.parse_command_line_args(conf)

    reactor = zmq_proxy.ZmqProxy(conf)

    try:
        while True:
            reactor.run()
    except (KeyboardInterrupt, SystemExit):
        LOG.info(_LI("Exit proxy by interrupt signal."))
    finally:
        reactor.close()
예제 #7
0
    def setUp(self):
        super(TestZmqAckManager, self).setUp()

        # register and set necessary config opts
        self.messaging_conf.transport_driver = 'zmq'
        zmq_options.register_opts(self.conf)
        kwargs = {
            'rpc_zmq_matchmaker': 'dummy',
            'use_pub_sub': False,
            'use_router_proxy': True,
            'rpc_thread_pool_size': 1,
            'rpc_use_acks': True,
            'rpc_ack_timeout_base': 5,
            'rpc_ack_timeout_multiplier': 1,
            'rpc_retry_attempts': 2
        }
        self.config(group='oslo_messaging_zmq', **kwargs)
        self.conf.register_opts(zmq_proxy.zmq_proxy_opts,
                                group='zmq_proxy_opts')

        # mock set_result method of futures
        self.set_result_patcher = mock.patch.object(
            zmq_receivers.futurist.Future,
            'set_result',
            side_effect=zmq_receivers.futurist.Future.set_result,
            autospec=True)
        self.set_result = self.set_result_patcher.start()

        # mock send method of senders
        self.send_patcher = mock.patch.object(
            zmq_senders.RequestSenderProxy,
            'send',
            side_effect=zmq_senders.RequestSenderProxy.send,
            autospec=True)
        self.send = self.send_patcher.start()

        # get driver
        transport = oslo_messaging.get_transport(self.conf)
        self.driver = transport._driver

        # prepare and launch proxy
        self.proxy = zmq_proxy.ZmqProxy(self.conf)
        vars(self.driver.matchmaker).update(vars(self.proxy.matchmaker))
        self.executor = zmq_async.get_executor(self.proxy.run)
        self.executor.execute()

        # create listener
        self.listener = zmq_common.TestServerListener(self.driver)

        # create target and message
        self.target = oslo_messaging.Target(topic='topic', server='server')
        self.message = {'method': 'xyz', 'args': {'x': 1, 'y': 2, 'z': 3}}

        # start listening to target
        self.listener.listen(self.target)

        # get ack manager
        self.ack_manager = self.driver.client.get().publishers['default']

        self.addCleanup(
            zmq_common.StopRpc(self, [('listener', 'stop'),
                                      ('executor', 'stop'), ('proxy', 'close'),
                                      ('driver', 'cleanup'),
                                      ('send_patcher', 'stop'),
                                      ('set_result_patcher', 'stop')]))

        # wait for all connections to be established
        # and all parties to be ready for messaging
        time.sleep(1)
    def setUp(self):
        super(TestZmqAckManager, self).setUp()

        # register and set necessary config opts
        self.messaging_conf.transport_driver = 'zmq'
        zmq_options.register_opts(self.conf)
        kwargs = {'rpc_zmq_matchmaker': 'dummy',
                  'use_pub_sub': False,
                  'use_router_proxy': True,
                  'rpc_thread_pool_size': 1,
                  'rpc_use_acks': True,
                  'rpc_ack_timeout_base': 5,
                  'rpc_ack_timeout_multiplier': 1,
                  'rpc_retry_attempts': 2}
        self.config(group='oslo_messaging_zmq', **kwargs)
        self.conf.register_opts(zmq_proxy.zmq_proxy_opts,
                                group='zmq_proxy_opts')

        # mock set_result method of futures
        self.set_result_patcher = mock.patch.object(
            zmq_receivers.futurist.Future, 'set_result',
            side_effect=zmq_receivers.futurist.Future.set_result, autospec=True
        )
        self.set_result = self.set_result_patcher.start()

        # mock send method of senders
        self.send_patcher = mock.patch.object(
            zmq_senders.RequestSenderProxy, 'send',
            side_effect=zmq_senders.RequestSenderProxy.send, autospec=True
        )
        self.send = self.send_patcher.start()

        # get driver
        transport = oslo_messaging.get_transport(self.conf)
        self.driver = transport._driver

        # prepare and launch proxy
        self.proxy = zmq_proxy.ZmqProxy(self.conf)
        vars(self.driver.matchmaker).update(vars(self.proxy.matchmaker))
        self.executor = zmq_async.get_executor(self.proxy.run)
        self.executor.execute()

        # create listener
        self.listener = zmq_common.TestServerListener(self.driver)

        # create target and message
        self.target = oslo_messaging.Target(topic='topic', server='server')
        self.message = {'method': 'xyz', 'args': {'x': 1, 'y': 2, 'z': 3}}

        # start listening to target
        self.listener.listen(self.target)

        # get ack manager
        self.ack_manager = self.driver.client.get().publishers['default']

        self.addCleanup(
            zmq_common.StopRpc(
                self, [('listener', 'stop'), ('executor', 'stop'),
                       ('proxy', 'close'), ('driver', 'cleanup'),
                       ('send_patcher', 'stop'),
                       ('set_result_patcher', 'stop')]
            )
        )

        # wait for all connections to be established
        # and all parties to be ready for messaging
        time.sleep(1)
예제 #9
0
#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
#    License for the specific language governing permissions and limitations
#    under the License.

import argparse
import logging

from oslo_config import cfg

from oslo_messaging._drivers.zmq_driver.proxy import zmq_proxy
from oslo_messaging._drivers.zmq_driver.proxy import zmq_queue_proxy
from oslo_messaging._drivers.zmq_driver import zmq_options

CONF = cfg.CONF

zmq_options.register_opts(CONF)

opt_group = cfg.OptGroup(name='zmq_proxy_opts', title='ZeroMQ proxy options')
CONF.register_opts(zmq_proxy.zmq_proxy_opts, group=opt_group)

USAGE = """ Usage: ./zmq-proxy.py [-h] [] ...

Usage example:
 python oslo_messaging/_cmd/zmq-proxy.py"""


def main():
    parser = argparse.ArgumentParser(description='ZeroMQ proxy service',
                                     usage=USAGE)

    parser.add_argument('-c',