Skip to main content

有赞 Dubbo SDK - 支持 Dubbo RPC 调用

Project description

YZ-Dubbo

有赞 Dubbo SDK - 基于 Tether 网关的 Dubbo RPC 调用封装

功能特性

  • 🚀 简单易用: 提供简洁的函数式 API
  • ⏱️ 超时控制: 支持自定义超时时间,默认3秒

安装

# 开发模式安装
cd packages/yz_dubbo
pip install -e .

# 或从 requirements.txt 安装
pip install -r requirements.txt

快速开始

基础调用

from yz_dubbo import invoke

# 调用 Dubbo 服务
result = invoke(
    service_name="com.youzan.service.UserService",
    method_name="getUserInfo",
    args=[{"userId": 123}]
)

print(result)  # 直接返回响应数据

自定义 Headers

result = invoke(
    service_name="com.youzan.service.OrderService",
    method_name="createOrder",
    args=[{"productId": 456, "quantity": 1}],
    headers={
        "X-Request-Id": "req-123",
        "X-Tenant-Id": "tenant-456"
    }
)

设置超时时间

result = invoke(
    service_name="com.youzan.service.PaymentService",
    method_name="pay",
    args=[payment_data],
    timeout=10000  # 10秒超时
)

代码配置

from yz_dubbo import DubboConfig, DubboClient

# 使用预设环境
config = DubboConfig(env="prod")

# 使用自定义配置
client = DubboClient(config=config)
result = client.invoke(
    service_name="com.youzan.service.UserService",
    method_name="getUser",
    args=[{"userId": 123}]
)
client.close()

错误处理

错误码对照表

错误码 说明 HTTP Status
ERR_CLIENT_ERROR 客户端错误 400
ERR_TIMEOUT 请求超时 504
ERR_PARAMS_TYPE_ERROR 参数类型错误 400
ERR_FLOW_LIMIT 流量限制 429
ERR_SERVICE_UNAVAILABLE 服务不可用 503
ERR_INTERNAL_SERVER_ERROR 内部错误 500
ERR_NETWORK_ERROR 网络错误 503

异常处理示例

from yz_dubbo import invoke, DubboError, ErrorCode

try:
    result = invoke(
        service_name="com.youzan.service.UserService",
        method_name="getUser",
        args=[{"userId": 123}]
    )
    print(f"成功: {result}")

except DubboError as e:
    print(f"错误码: {e.code}")
    print(f"错误信息: {e.message}")
    print(f"上下文: {e.context}")

    # 根据错误码处理
    if e.code == ErrorCode.ERR_TIMEOUT:
        print("请求超时,请稍后重试")
    elif e.code == ErrorCode.ERR_NETWORK_ERROR:
        print("网络错误")
    else:
        print("其他错误")

API 参考

invoke()

def invoke(
    service_name: str,
    method_name: str,
    args: Optional[List[Any]] = None,
    headers: Optional[Dict[str, str]] = None,
    timeout: int = 3000,
) -> Any

参数:

  • service_name: 服务接口名 (如 com.youzan.service.UserService)
  • method_name: 方法名
  • args: 参数列表 (默认为 [])
  • headers: 自定义请求头 (默认为 {})
  • timeout: 超时时间,单位毫秒 (默认 3000)

返回值: 直接返回服务响应的 JSON 数据

异常: 抛出 DubboError

DubboClient

class DubboClient:
    def __init__(self, config: Optional[DubboConfig] = None) -> None
    def invoke(
        self,
        service_name: str,
        method_name: str,
        args: Optional[List[Any]] = None,
        headers: Optional[Dict[str, str]] = None,
        timeout: int = 3000
    ) -> Any
    def close(self) -> None

DubboConfig

class DubboConfig:
    def __init__(
        self,
        env: Optional[str] = None,
        host: Optional[str] = None,
        port: int = 80,
        timeout: int = 3000,
        from_app: Optional[str] = None
    ) -> None

项目结构

yz_dubbo/
├── __init__.py         # 对外 API 导出
├── client.py           # 核心客户端实现
├── config.py           # 配置管理
├── errors.py           # 错误定义
└── py.typed            # 类型标记

常见问题

Q: 如何切换环境?

A: 有三种方式:

# 1. 环境变量
export DUBBO_ENV=prod

# 2. 代码配置
from yz_dubbo import DubboConfig
config = DubboConfig(env="prod")

Q: 超时时间如何设置?

A: 可以全局设置或单次调用设置:

# 全局设置
config = DubboConfig(timeout=10000)

# 单次调用 (推荐)
invoke(..., timeout=5000)

Q: 如何添加自定义 Headers?

A: 通过 headers 参数传递:

result = invoke(
    service_name="com.youzan.service.UserService",
    method_name="getUser",
    args=[{"userId": 123}],
    headers={
        "X-Request-Id": "req-123",
        "X-Custom-Header": "custom-value"
    }
)

Q: 返回值是什么格式?

A: 直接返回服务响应的 JSON 数据,不做额外包装:

result = invoke(...)
# result 就是服务返回的原始数据,可能是 dict、list 或其他 JSON 类型

许可证

MIT License

联系方式

  • 项目地址: /packages/yz_dubbo
  • 测试目录: /tests/yz_dubbo

YZ-Dubbo - 让 Dubbo 调用更简单 🚀

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

yz_dubbo-0.1.2.tar.gz (8.4 kB view details)

Uploaded Source

Built Distribution

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

yz_dubbo-0.1.2-py3-none-any.whl (7.3 kB view details)

Uploaded Python 3

File details

Details for the file yz_dubbo-0.1.2.tar.gz.

File metadata

  • Download URL: yz_dubbo-0.1.2.tar.gz
  • Upload date:
  • Size: 8.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for yz_dubbo-0.1.2.tar.gz
Algorithm Hash digest
SHA256 c4b29db76ac1cbb48760e1fc0a66bdb1e53ba86e9c7079b4f740eb64720885ba
MD5 cd850695fe7f39d21b7b7504c5c66618
BLAKE2b-256 5e362d678f7bc4bfb5ea99cbbf9fe162bef2e1c7ef86421ce0b13b4e7d101aa5

See more details on using hashes here.

File details

Details for the file yz_dubbo-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: yz_dubbo-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 7.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for yz_dubbo-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 5fe99432f359b488fda7c71d5621793034d3d101680a3a6a9fb3473db3e52cd8
MD5 8256b932dbca0098e77a36be14fbbfea
BLAKE2b-256 772242dcfec0ab4a6e57e438a624afbc4e429f82aa70b01312789b0302e6cde6

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