62 lines
1.6 KiB
Python
62 lines
1.6 KiB
Python
"""MessageBus Protocol — Agent 间通信抽象层。"""
|
||
|
||
from __future__ import annotations
|
||
|
||
from typing import Any, Callable, Awaitable, Protocol as TypingProtocol, runtime_checkable
|
||
|
||
from agentkit.bus.message import AgentMessage
|
||
|
||
|
||
@runtime_checkable
|
||
class MessageBus(TypingProtocol):
|
||
"""Agent 间通信总线协议。
|
||
|
||
支持三种通信模式:
|
||
- 点对点:publish() 指定 recipient
|
||
- 广播:publish() 不指定 recipient(或 broadcast())
|
||
- 请求-响应:request() 等待对方通过 correlation_id 回复
|
||
"""
|
||
|
||
async def publish(self, message: AgentMessage) -> None:
|
||
"""发布消息。如果 message.recipient 为 None,则广播。"""
|
||
...
|
||
|
||
async def subscribe(
|
||
self,
|
||
agent_name: str,
|
||
handler: Callable[[AgentMessage], Awaitable[None]],
|
||
) -> None:
|
||
"""订阅消息。handler 在收到消息时被调用。"""
|
||
...
|
||
|
||
async def unsubscribe(self, agent_name: str) -> None:
|
||
"""取消订阅。"""
|
||
...
|
||
|
||
async def request(
|
||
self,
|
||
message: AgentMessage,
|
||
timeout: float = 30.0,
|
||
) -> AgentMessage:
|
||
"""请求-响应模式。发送消息并等待回复。
|
||
|
||
Args:
|
||
message: 请求消息
|
||
timeout: 超时秒数
|
||
|
||
Returns:
|
||
响应消息
|
||
|
||
Raises:
|
||
TimeoutError: 超时未收到响应
|
||
"""
|
||
...
|
||
|
||
async def broadcast(self, message: AgentMessage) -> None:
|
||
"""广播消息给所有订阅者。"""
|
||
...
|
||
|
||
async def health_check(self) -> bool:
|
||
"""健康检查。"""
|
||
...
|