python hessian dubbo测试

 Dubbo本身支持多种远程调用方式,例如Dubbo RPC(二进制序列化 + tcp协议)、http invoker(二进制序列化 + http协议)、hessian(二进制序列化 + http协议)、WebServices (文本序列化 + http协议)等。
    Dubbo是支持hessian+http协议调用的,hessian是一种二进制序列化的方式。咱们用python调用的dubbo的时候,就是用hessian+http的方式调用,所以dubbo项目要配置使用hessian方式序列化,如果小伙伴要用python调用的时候,注意要找开发小哥哥在项目里面改成hessian方式的序列化,也就是改个配置文件的事,不影响原来的项目,如下图:

接口说明


既然做接口测试,那接口的说明是必须的,问开发GG要,不要问从哪里来。。。。大致包括如下内容:

接口地址

http://192.168.133.129:20880/com.unj.dubbotest.provider.DemoService

接口名

com.unj.dubbotest.provider.DemoService 

方法

sayHello,getUsers 

参数

name

 

python调用环境


1、让开发GG把项目里的dubbo加上hessian方式,绿色公害无污染

2、下载python-hessian-master,地址:https://github.com/theatlantic/python-hessian

3、安装,解压后进入该目录,运行python setup.py install

到这里我们python的调用环境就ok了

#引入相关包
from pyhessian.client import HessianProxy

url = 'http://192.168.133.129:20880/'  #接口地址
interface = 'com.unj.dubbotest.provider.DemoService' #接口名
full_url=url+interface
params='xiaoqiang'#参数

service = HessianProxy(full_url)
res = service.sayHello(params) #sayHello是接口里的方法
print(res)


==============================================================

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,
}):

  

很好理解 service_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.dubbo</groupId>
<artifactId>dubbo-rpc-jsonrpc</artifactId>
<version>2.7.2</version>
</dependency>
总结:
虽然能调通,但是感觉很多功能不全,比入group直接指定为 * 就不行
如果想用 python client ,provider 必须是 jsonrpc

 
原文地址:https://www.cnblogs.com/SunshineKimi/p/12721859.html