pythonを使用してDubboサービスに接続する

11206 ワード

目次
  • 前言
  • Dubbo python clientインストール
  • pythonコード
  • 注意
  • サービス提供providerの変更
  • 注意
  • 感想
  • 前言
    AI部分はpythonで書かれているので、pythonでdubboのサービスを呼び出したいです.
    Dubbo python clientインストール
    github :https://github.com/apache/dubbo-pythongithubでのインストール方法は、もう紹介しないで、pycharmの中でdubbo-clientを直接検索することができて、インストールの作者はJoe Caoのあの
    pythonコード
    # -*- coding: utf-8 -*-
    
    from dubbo_client import ApplicationConfig, ZookeeperRegistry, DubboClient, DubboClientError
    
    service_interface = 'com.truthso.monitor.service.CompareService'
    registry = ZookeeperRegistry('127.0.0.1:2181')
    compare_provider = DubboClient(service_interface, registry, version='1.0.0', group='gaopin')
    
    print compare_provider .compare({
        u'width': 650,
        u'height': 433,
        u'phash': u'1011100001101000101100001101110101101100101001010101111001001010',
        u'sum': 5429,
        u'ave': 5.0,
        u'dc': 4331,
        u'rSum': 144219,
        u'gSum': 142677,
        u'bSum': 136723,
        u'hash': 4064693128758910538,
    }):
    
    
  • サービスをよく理解していますinterfaceは私たちが呼び出したインタフェースの名前
  • です.
  • ZookeeperRegistryはzookeeperのアドレス
  • です
  • DubboClientではversionはインタフェースのバージョンであり、groupは呼び出したいインタフェースがあるgroup
  • である.
  • 直接コールcompare_providerの具体的な方法
  • に注意
    groupは*がproviderが提供するサービスが見つからないと誤報する形式jsonrpcとして指定できません.つまり、protocol Nameの方式はjsonrpcです.そうしないとpython呼び出しができないときに誤報が見つかりませんが、javaはできますが、以前protocolがdubboの方式だった場合、今はjsonrpcで、javaでの処理が異なる可能性があります.例えば元はオブジェクトだったが、今はjsonかもしれない.
    サービス提供providerの変更
    私のプロジェクトはダイナミックに提供されているサービスです.つまり、サービスの構成はmysqlから読み込まれ、符号化された方法で提供されています.
    ApplicationConfig applicationConfig = new ApplicationConfig();
    applicationConfig.setName(config.getApplicationName());
    
     RegistryConfig registryConfig = new RegistryConfig();
     registryConfig.setAddress(config.getRegistryAddress());
    
     ProtocolConfig protocol = new ProtocolConfig();
     protocol.setName(config.getProtocolName());
     protocol.setPort(config.getProtocolPort());
    
     CompareServiceImpl impl = new CompareServiceImpl();
    
     ServiceConfig<CompareService> service = new ServiceConfig<>();
     service.setApplication(applicationConfig);
     service.setRegistry(registryConfig);
     service.setProtocol(protocol);
     service.setInterface(CompareService.class);
     service.setRef(impl);
     service.setVersion(config.getVersion());
     service.setGroup(config.getGroup());
    
     service.export();
    

    ProtocolConfig関連の構成はすべてデータベース内にあるので、ProtocolNameをjsonrpcに設定するだけでいいです
    に注意
    mavenを追加する必要があります
    <dependency>
        <groupId>org.apache.dubbogroupId>
        <artifactId>dubbo-rpc-jsonrpcartifactId>
        <version>2.7.2version>
    dependency>
    

    感想
  • はチューニングできますが、機能不全が多いような気がします.グループに入って直接*に指定するよりは
  • できません.
  • python clientを使用するには、providerはjsonrpc
  • でなければなりません.