dubbo

Posted 入门到放弃

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dubbo相关的知识,希望对你有一定的参考价值。

本文主要介绍使用Python调用Hession协议dubbo接口示例。

关于Dubbo Hession协议:

Dubbo本身支持多种远程调用方式,例如Dubbo RPC(二进制序列化 + tcp协议)、http invoker(二进制序列化 + http协议)、hessian(二进制序列化 + http协议)、WebServices (文本序列化 + http协议)等。

Dubbo将这些协议的实现进行了封装了,无论是服务端(开发服务)还是客户端(调用服务),都不需要关心协议的细节,只需要在配置中指定使用的协议即可,从而保证了服务提供方与服务消费方之间的透明。

如果我们使用Dubbo的服务注册中心组件,这样服务提供方将服务发布到注册的中心,只是将服务的名称暴露给外部,而服务消费方只需要知道注册中心和服务提供方提供的服务名称,就能够透明地调用服务。

Python调用Hession协议接口基本流程如下:

1. 下载安装Python Hessian库,地址:https://github.com/theatlantic/python-hessian,或者pip install python-hessian进行安装

2. 定义Hession接口的服务、接口、方法名称

3. 使用protocol.object_factory方法,调用该方法参数构造方法,构造调用参数

4. 使用HessianProxy方法,调用接口

示例代码:

# -*- coding:utf-8 -*-
from pyhessian.client import HessianProxy
from pyhessian import protocol
import json
 
def InvokeHessian(service,interface,method,req,retcode=\'000000\'):
    try:
        url=\'http://192.168.0.1:10883/\'+service+\'.\'+interface
         
        print \'URL:\\t%s\'%url
        print \'Method:\\t%s\'%method
        print \'Req:\\t%s\'%req
        res=getattr(HessianProxy(url),method)(req)
        print \'Res:\\t%s\'%json.dumps(res,ensure_ascii=False)
         
    except Exception,e:
        print e
         
 
if __name__ == \'__main__\':
    service=\'com.service.common.api.service\'
    interface=\'TestHessianService\'
    method=\'testHessian\'
    req=protocol.object_factory(\'com.service.common.api.service.model.req.TestHessianRequest\',
                                param1=\'lovesoo\',param2=10086)
     
    InvokeHessian(service, interface, method,req)

 几种rpc对比:

 

 

以上是关于dubbo的主要内容,如果未能解决你的问题,请参考以下文章

Dubbo多个远程代码执行漏洞

Dubbo 存在远程代码执行漏洞

Dubbo 被曝出“高危”远程代码执行漏洞

响应式编程的实践

构建dubbo分布式平台-maven代码结构

构建dubbo分布式平台-maven代码结构