尝试更熟练的使用macdown,因为AI部分是用python写的,所以想在 python 中调用dubbo的服务。
github :https://github.com/apache/dubbo-python
github中安装方法,就不再介绍,也可以直接在 pycharm 里面搜索 dubbo-client,安装 作者是Joe Cao的那个
# -*- 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,
}):
group 无法指定为 * 会报错说找不到
provider 提供的服务的形式 jsonrpc 也就是,protocol Name 的方式是 jsonrpc 不然无法python调用的时候会报错找不到,但是java可以
但是 如果以前是 protocol 是 dubbo 的方式,现在是 jsonrpc ,可能在java中的处理会有不同,比如返回的原来是对象,现在可能是个json
因为我的项目是动态提供的服务,也就是服务的配置是从 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>