
一、趣味类比原生 API 就像无分拣员的原始信箱所有信件胡乱堆在一起取信需要手动指定类型、手动判断、手动容错、手动销毁信件多了完全乱套无法分层处理、无法分级响应。二、原生 API 五大致命工程痛点逻辑分散创建、收发、销毁、类型判断代码散落业务重复代码极多无消息分级普通消息、紧急消息、错误消息混杂无法优先级处理容错极差无超时、无重试、无参数校验出错直接崩溃资源泄露严重进程异常退出队列永久残留内核无法链式处理收到消息后只能单步处理无法多级流水线校验、解析、转发三、基础结构体封装代码初级优化封装统一队列管理器统一管理队列 ID、收发、销毁c运行#include stdio.h #include stdlib.h #include sys/ipc.h #include sys/msg.h #include string.h #include unistd.h #define MSG_BUF_LEN 128 // 消息结构体 typedef struct { long type; char data[MSG_BUF_LEN]; } MsgData; // 消息队列管理器 typedef struct { key_t key; int msqid; } MsgQueueMgr; // 创建队列管理器 MsgQueueMgr* msg_queue_create(key_t key) { MsgQueueMgr* mgr malloc(sizeof(MsgQueueMgr)); mgr-key key; mgr-msqid msgget(key, IPC_CREAT | 0666); if(mgr-msqid -1) { perror(queue create fail); free(mgr); return NULL; } return mgr; } // 发送消息封装 int msg_queue_send(MsgQueueMgr* mgr, long type, char* buf) { MsgData msg; msg.type type; strncpy(msg.data, buf, MSG_BUF_LEN); return msgsnd(mgr-msqid, msg, MSG_BUF_LEN, 0); } // 接收消息封装 int msg_queue_recv(MsgQueueMgr* mgr, long type, char* out_buf) { MsgData msg; int ret msgrcv(mgr-msqid, msg, MSG_BUF_LEN, type, 0); if(ret 0) { strcpy(out_buf, msg.data); } return ret; } // 销毁队列 void msg_queue_destroy(MsgQueueMgr* mgr) { msgctl(mgr-msqid, IPC_RMID, NULL); free(mgr); } // 测试 int main() { key_t key ftok(./msgtest.txt, 0x22); MsgQueueMgr* mgr msg_queue_create(key); msg_queue_send(mgr, 1, 普通业务消息); char buf[128] {0}; msg_queue_recv(mgr, 1, buf); printf(接收消息%s\n, buf); msg_queue_destroy(mgr); return 0; }四、基础封装依然存在的核心短板引出责任链所有消息统一处理无法区分普通消息、紧急消息、系统消息、错误消息无法逐级校验处理消息合法性校验 → 日志打印 → 业务处理 → 异常兜底新增消息类型必须修改主逻辑扩展性极差无法实现优先级链式穿透处理最佳解决方案责任链模式 —— 给消息设计多级处理流水线每一级处理器只处理自己对应的消息类型不匹配则自动传递给下一级。五、本篇横向树状思维导图六、本篇小结基础封装解决了代码冗余但无法解决多类型消息分级、流水线处理的核心业务问题。第三篇引入责任链模式实现工业级消息队列多级分发架构。谢谢