base_agent/uas/comm/message.py

52 lines
1.6 KiB
Python
Raw Normal View History

2026-06-18 03:28:14 +00:00
# -*- coding: utf-8 -*-
"""
消息数据模型
统一所有中间件的消息格式
"""
import time
import uuid
from dataclasses import dataclass, field
from enum import Enum
from typing import Any, Dict, Optional
class MessagePriority(Enum):
LOW = 0
NORMAL = 1
HIGH = 2
URGENT = 3
@dataclass
class Message:
"""统一消息体"""
topic: str
payload: Any
msg_id: str = field(default_factory=lambda: str(uuid.uuid4()))
timestamp: float = field(default_factory=time.time)
headers: Dict[str, str] = field(default_factory=dict)
priority: MessagePriority = MessagePriority.NORMAL
reply_to: Optional[str] = None # 用于 Request/Reply 模式
correlation_id: Optional[str] = None
def to_dict(self) -> dict:
return {
"msg_id": self.msg_id,
"topic": self.topic,
"payload": self.payload,
"timestamp": self.timestamp,
"headers": self.headers,
"priority": self.priority.value,
"reply_to": self.reply_to,
"correlation_id": self.correlation_id,
}
@classmethod
def from_dict(cls, data: dict) -> "Message":
data["priority"] = MessagePriority(data.get("priority", 1))
return cls(**{k: v for k, v in data.items() if k in cls.__dataclass_fields__})
def __repr__(self):
return (f"Message(id={self.msg_id[:8]}..., topic={self.topic!r}, "
f"priority={self.priority.name})")