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.3.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.3-py3-none-any.whl (7.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: yz_dubbo-0.1.3.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.3.tar.gz
Algorithm Hash digest
SHA256 9a1531d3ed42b802ab9a0c979d6de5e6931e3c6f803f027316eff96f97123230
MD5 f00491dfc5632a0fa20f03340201d01e
BLAKE2b-256 7520ded6759a2e91481a6d0e93deaf53c1581e0dd7a8afde2455d203a6a4da5b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: yz_dubbo-0.1.3-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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 b5bdaf5eb42547e6c9c0eeb4a72a54dcc21cf0473eb54b714c90d64a5f44267d
MD5 f69a4a1ec746a1702bed0621aed9dbd9
BLAKE2b-256 020484788e8bbd9ae2aff6cd14de316f2874b8848486536eae9957ddf1ad358d

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