使用 python 连接Dubbo 服务

目录

  • 前言
    • Dubbo python client 安装
    • python 代码
      • 注意
    • 服务提供provider的改变
      • 注意
    • 感想

前言

尝试更熟练的使用macdown,因为AI部分是用python写的,所以想在 python 中调用dubbo的服务。

Dubbo python client 安装

github :https://github.com/apache/dubbo-python
github中安装方法,就不再介绍,也可以直接在 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,
}):

  1. 很好理解 service_interface 是我们调用的接口的名称
  2. ZookeeperRegistry 是 zookeeper 的地址
  3. DubboClient 中 version 是接口的版本,group 是想要调用的接口所在的group
  4. 直接调用 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>

感想

  1. 虽然能调通,但是感觉很多功能不全,比入group直接指定为 * 就不行
  2. 如果想用 python client ,provider 必须是 jsonrpc

你可能感兴趣的:(python,dubbo)