Skip to main content

Python3 Dubbo Client.

Project description

python3-dubbo

Python3 Dubbo Client. 在 https://github.com/apache/dubbo-python2 的基础上升级为 python3 版本

Installation

pip install python3-dubbo

Usage

基础使用

from dubbo.client import DubboClient, ZkRegister

# 支持从Zk中获取服务的provider,支持根据provider的权重选择主机
zk = ZkRegister('127.0.0.1:2181')
dubbo_cli = DubboClient('com.qianmi.pc.api.GoodsQueryProvider', zk_register=zk)

# 支持不使用Zk,直接连接指定的远程主机
dubbo_cli = DubboClient('com.qianmi.pc.api.GoodsQueryProvider', host='127.0.0.1:20880')

admin_id = 'A000000'
result = dubbo_cli.call('listByIdString', admin_id)

如何定义参数

python-dubbo支持以下Java类型的参数,表格右边一列代表了在Pyton中与指定Java类型所对应的类型

类型 Java Python
布尔类型 boolean bool
整型 int, long int
浮点类型 float, double float
字符串类型 java.lang.String str
列表类型 Collection & Array []
自定义的对象类型 java.lang.Object 具体使用方法如下所示
使用Java的对象类型
from dubbo.client import DubboClient, ZkRegister
from dubbo.codec.encoder import Object

# 创建channel对象
channel = Object('com.qianmi.pc.base.api.constants.ChannelEnum', values={
    'name': 'D2C'
})

# 创建spu_query_request对象
spu_query_request = Object('com.qianmi.pc.item.api.spu.request.SpuQueryRequest')
spu_query_request['chainMasterId'] = 'A000000'
spu_query_request['channel'] = channel
spu_query_request['pageSize'] = 2000

# 创建consumer并执行查询操作
zk = ZkRegister('172.21.4.71:2181')
spu_query_provider = DubboClient('com.qianmi.pc.item.api.spu.SpuQueryProvider', zk_register=zk)
result = spu_query_provider.call('query', spu_query_request)

如何使用枚举(enum)类型作为参数

# 定义一个枚举类型的对象
channel = Object('com.qianmi.pc.base.api.constants.ChannelEnum')
# 定义参数name并令其值为对应的枚举参数的值,之后使用该定义好的对象作为枚举类型变量即可
channel['name'] = 'D2C'

Reference

  • Python字节相关的转化操作:https://docs.python.org/2/library/struct.html
  • Hessian2的编码规则:http://hessian.caucho.com/doc/hessian-serialization.html
  • 实现Hessian2编码时的参考:参考1参考2
  • 对于部分不清楚且通过查阅文档仍无法了解的编码方式,先使用Java的dubbo客户端正常调用接口,之后使用Wireshark抓包获取请求和响应的数据报文,仔细的分析报文来推测编码方式
  • Dubbo相关的编码规则:参考1参考2
  • Dubbo的心跳机制:http://www.cnblogs.com/java-zhao/p/8539046.html
  • 部分实现参考了dubbo的Java源码中的实现
  • 对于所有的字符串,在网络传输前进行编码,编码一律使用unicode来完成,如果一个字符串是str则先将其decode为unicode之后再进行操作;
  • 对于所有的字符串,在网络上获取到的数据之后进行解码,解码得到的字符串是unicode,之后将其encode为str再交给客户程序;
  • 支持传输utf-8编码和Emoji😋
  • 使用epoll模型来维护所有的链接,如果使用多线程来维护连接将产生过多的thread_context_switch,影响性能
  • 类似于HTTP请求和响应,dubbo的请求和响应也是同步的并且可以看成是一个事务;不过dubbo使用了msg_id来为请求排序,这使得我们不再需要像HTTP请求那样在单个链接上进行同步的请求和响应,因此在单个连接上有多个请求时可以一定程度的降低请求总时间,这种对请求进行编码的理念类似于HTTP2中的stream ID

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

python3-dubbo-0.0.7.tar.gz (24.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

python3_dubbo-0.0.7-py3-none-any.whl (24.9 kB view details)

Uploaded Python 3

File details

Details for the file python3-dubbo-0.0.7.tar.gz.

File metadata

  • Download URL: python3-dubbo-0.0.7.tar.gz
  • Upload date:
  • Size: 24.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.9.6

File hashes

Hashes for python3-dubbo-0.0.7.tar.gz
Algorithm Hash digest
SHA256 2c3982ab133fc9381b5f86990f6501682b951b800c2b70ff4b81d1713ae7786b
MD5 6cf649c89bbdfe8d66263814b143727f
BLAKE2b-256 bd3ccde38b5a52258871cabf54206fd6c589ae91ef785983713dd6aebd760914

See more details on using hashes here.

File details

Details for the file python3_dubbo-0.0.7-py3-none-any.whl.

File metadata

  • Download URL: python3_dubbo-0.0.7-py3-none-any.whl
  • Upload date:
  • Size: 24.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.9.6

File hashes

Hashes for python3_dubbo-0.0.7-py3-none-any.whl
Algorithm Hash digest
SHA256 86be8dab792d4144a0e69a699c0873aa8fc9ea245d4b230e4ccc2474c7bd7450
MD5 3d8779c1d3841ad1ca06a9948e34178c
BLAKE2b-256 069e8cb194397ac70961a4cc171016990fe0d6f08455767b4467bfd0aff57e8d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page