尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

itstack-demo-design MQ适配器实战:如何统一接入两家不同MQ厂商的订单消息消费?

itstack-demo-design MQ适配器实战:如何统一接入两家不同MQ厂商的订单消息消费? itstack-demo-design MQ适配器实战如何统一接入两家不同MQ厂商的订单消息消费【免费下载链接】itstack-demo-design:art: 《重学Java设计模式》是一本互联网真实案例实践书籍。以落地解决方案为核心从实际业务中抽离出交易、营销、秒杀、中间件、源码等22个真实场景来学习设计模式的运用。欢迎关注小傅哥微信(fustack)公众号bugstack虫洞栈博客https://bugstack.cn项目地址: https://gitcode.com/fuzhengwei/itstack-demo-design在 itstack-demo-design 开源项目中MQ适配器案例模块 itstack-demo-design-6-02演示了如何用适配器模式统一接入两家不同 MQ 厂商的订单消息消费无需修改下游业务代码只靠一张字段映射表就能把格式各异的 MQ 消息统一转换成目标结构。一、背景两家厂商两套消息格式 想象你负责营销系统需要消费两类上游消息来发放首单返利消息来源消息体关键字段厂商APOP 订单OrderMq.javauid、orderId、createOrderTime厂商B开户系统create_account.javanumber、accountDate、desc虽然业务含义相似用户、单据号、业务时间但字段名、消息结构完全不同。二、不写适配器的痛点每个厂商写一个消费者 ❌在早期方案 itstack-demo-design-6-01 中每接入一家厂商就要新写一个消费者类OrderMqService.java —— 解析OrderMq再取getUid()create_accountMqService.java —— 解析create_account再取getNumber()后果很明显厂商越多消费者类越多下游业务被迫感知每种消息格式字段一变就得改代码扩展成本线性增长。三、适配器方案一张映射表统一所有消息 ✅核心思路不关心厂商只关心目标结构。第 1 步定义统一的目标模型用 RebateInfo.java 表示营销系统真正需要的字段userId、bizId、bizTime、desc。第 2 步配置目标字段 → 来源字段的映射关系以厂商B为例映射表只有一小段HashMapString, String link01 new HashMap(); link01.put(userId, number); // 用户ID ← 开户编号 link01.put(bizId, number); // 业务ID ← 开户编号 link01.put(bizTime, accountDate);// 业务时间 ← 开户时间 link01.put(desc, desc); RebateInfo rebateInfo MQAdapter.filter(create_account.toString(), link01);第 3 步通用适配逻辑一次写好永久复用MQAdapter.java 中的filter方法通过反射按映射表把任意 JSON 消息翻译成RebateInfo新厂商接入只加一张映射表一行业务代码都不用改。完整运行效果可以在 ApiTest.java 中看到两类消息适配前后字段被整齐地转换到统一结构下游只面向RebateInfo编程。四、进阶接口适配器统一查首单逻辑 适配器模式不止用于消息格式。同一个项目里还演示了接口适配不同厂商是否首单的查询方式不同POP 厂商POPOrderAdapterServiceImpl.java 直接调用远程接口自营业务InsideOrderService.java 改为订单数 ≤ 1两者都实现同一接口 OrderAdapterService.java上层业务只依赖isFirst(uId)彻底屏蔽厂商差异。五、实践要点小结 目标结构先行先明确下游业务真正需要什么如RebateInfo再谈适配映射优于硬编码字段对应关系做成配置表新厂商接入零代码接口适配器兜底连不上消息格式时用统一接口包装各厂商能力反射是利器也是风险映射键写错会在运行期才暴露建议上线前用单测参考 ApiTest.java覆盖全字段。六、相关资源 本案例出自《重学Java设计模式》系列实践从真实业务中抽离场景学习设计模式更多模块可浏览仓库内各itstack-demo-design-x-xx目录。【免费下载链接】itstack-demo-design:art: 《重学Java设计模式》是一本互联网真实案例实践书籍。以落地解决方案为核心从实际业务中抽离出交易、营销、秒杀、中间件、源码等22个真实场景来学习设计模式的运用。欢迎关注小傅哥微信(fustack)公众号bugstack虫洞栈博客https://bugstack.cn项目地址: https://gitcode.com/fuzhengwei/itstack-demo-design创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表