学堂 学堂 学堂公众号手机端

python hessian dubbo测试

lewis 1年前 (2024-05-02) 阅读数 16 #技术

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



版权声明

本文仅代表作者观点,不代表博信信息网立场。

热门