modify: call 构造信封协议(不修改调用方 payload)
This commit is contained in:
@@ -42,10 +42,14 @@ async with Client(session=zenoh_session) as client:
|
||||
| `session` | `zenoh.Session` | Zenoh 会话对象 |
|
||||
| `worker_type` | `str` | Worker 类型名(如 `"example"`) |
|
||||
| `subject` | `str` | Zenoh 主题(如 `"example.add"`) |
|
||||
| `payload` | `dict` | 调用载荷 |
|
||||
| `payload` | `dict` | 业务参数(自动封装为信封) |
|
||||
| `method` | `str` | HTTP 方法(`"GET"` / `"POST"`) |
|
||||
| `timeout` | `float` | 超时时间(秒) |
|
||||
|
||||
> **信封协议**:`call()` 会把 `payload` 自动封装为
|
||||
> `{"meta": {"method": ...}, "data": payload}` 发送,**不再修改调用方传入的 dict**;
|
||||
> 若传入的 `payload` 已含 `meta`/`data` 结构则原样复用(仅补 `meta.method`)。
|
||||
|
||||
### 同步调用
|
||||
|
||||
```python
|
||||
|
||||
@@ -52,7 +52,16 @@ class Client:
|
||||
timeout: float = 3.0,
|
||||
retries: int = 1,
|
||||
) -> Dict[str, Any]:
|
||||
payload.setdefault("_method", method.upper())
|
||||
# 信封协议: {"meta": {...}, "data": {...}},不修改调用方的 payload。
|
||||
# 若调用方已传信封结构则复用,仅补充 meta.method。
|
||||
if isinstance(payload, dict) and ("meta" in payload or "data" in payload):
|
||||
envelope = {
|
||||
"meta": dict(payload.get("meta") or {}),
|
||||
"data": payload.get("data") or {},
|
||||
}
|
||||
envelope["meta"].setdefault("method", method.upper())
|
||||
else:
|
||||
envelope = {"meta": {"method": method.upper()}, "data": payload}
|
||||
full_key = ""
|
||||
for attempt in range(retries + 1):
|
||||
workers = await self._get_workers(worker_type)
|
||||
@@ -63,7 +72,7 @@ class Client:
|
||||
try:
|
||||
reply_iter = self._session.get(
|
||||
full_key,
|
||||
payload=orjson.dumps(payload),
|
||||
payload=orjson.dumps(envelope),
|
||||
consolidation=zenoh.ConsolidationMode.NONE,
|
||||
)
|
||||
def _get_first(iterator):
|
||||
|
||||
Reference in New Issue
Block a user