Пример #1
0
 def __init__(self, service, socket_config, service_name=None):
     trans_socket = TSocket(**socket_config)
     self.__transport = TBufferedTransportFactory()\
         .get_transport(trans_socket)
     if service_name:
         protocol_factory = TMultiplexedProtocolFactory(
             TBinaryProtocolFactory(), service_name)
     else:
         protocol_factory = TBinaryProtocolFactory()
     protocol = protocol_factory.get_protocol(self.__transport)
     self.__client = TClient(service, protocol)
     self.__is_open = False
Пример #2
0
def client_two(timeout=3000):
    binary_factory = TBinaryProtocolFactory()
    multiplexing_factory = TMultiplexedProtocolFactory(binary_factory,
                                                       "ThingTwoService")
    return client_context(mux.ThingTwoService, unix_socket=sock_path,
                          timeout=timeout,
                          proto_factory=multiplexing_factory)
Пример #3
0
def request_thrift(thrift_name,service, method, url, port, *args, **kwargs):
    ''' 通用的 multiplexed '''
    module_name = thrift_name.replace('.', '_')
    thrift_module = thriftpy.load(thrift_name, module_name=module_name)
    thrift_service = getattr(thrift_module, service)
    binary_factory = TBinaryProtocolFactory()
    thrift_factory = TMultiplexedProtocolFactory(binary_factory, module_name)
    with client_context(thrift_service, url, port, proto_factory=thrift_factory) as rt:
        res = getattr(rt, method)(*args, **kwargs)
        print(res)
Пример #4
0
def main():
    binary_factory = TBinaryProtocolFactory()
    dd_factory = TMultiplexedProtocolFactory(binary_factory, DD_SERVICE_NAME)
    with client_context(dd_thrift.DingService,
                        '127.0.0.1',
                        9090,
                        proto_factory=dd_factory) as c:
        # ring that doorbell
        dong = c.ding()
        print(dong)

    pp_factory = TMultiplexedProtocolFactory(binary_factory, PP_SERVICE_NAME)
    with client_context(pp_thrift.PingService,
                        '127.0.0.1',
                        9090,
                        proto_factory=pp_factory) as c:
        # play table tennis like a champ
        pong = c.ping()
        print(pong)
Пример #5
0
def get_client(thrift_file,
               thrift_name,
               url,
               port,
               service_name,
               is_multiplexer=False,
               timeout=20 * 1000):
    '''
    获取RPC client 链接
    :param thrift_file: thriftpy服务文件路径
    :param thrift_name:thritpy定义的类名称   # service 【CarsServices】
    :param url:rpc服务ip或域名
    :param port:服务端口
    :param service_name: 服务名称
    :param is_multiplexer:是否是多服务
    :return:
    '''
    try:
        my_service = getattr(
            thriftpy.load(thrift_file,
                          module_name=thrift_file.split('/')[-1].replace(
                              '.', '_')), thrift_name)
        if is_multiplexer:
            binary_factory = TBinaryProtocolFactory()
            dd_factory = TMultiplexedProtocolFactory(binary_factory,
                                                     service_name)
            client = make_client(my_service,
                                 url,
                                 port,
                                 proto_factory=dd_factory,
                                 timeout=timeout)
        else:
            client = make_client(my_service, url, port, timeout=timeout)
        return client
    except Exception as ex:
        logger.error()
        return None