# -*- 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})")