Spring Integration 完整笔记 + 和 spring-integration-mqtt、Paho、EMQX 的关系

Spring Integration 完整笔记 + 和 spring-integration-mqtt、Paho、EMQX 的关系

一、Spring Integration 是什么

一句话定义

Spring Integration 是 Spring 生态下的企业级消息集成框架,核心思想:消息驱动,用统一的消息模型,把不同外部系统接入应用,做数据流转。

它基于 EIP(Enterprise Integration Patterns,企业集成模式),也就是经典的企业系统集成设计模式(消息通道、适配器、过滤器、路由、转换器、处理器等)。

核心概念:Message(消息)

统一消息模型,结构固定:

Message = MessageHeaders(消息头:元数据) + payload(消息体,实际数据)

不管外部来源是MQTT、HTTP、文件、数据库、RabbitMQ,进入Spring Integration之后,全部统一包装成这个Message对象。

Spring Integration 的核心组件(通用组件,不是MQTT专属)

  1. Message:统一消息载体
  2. MessageChannel 消息通道:消息在组件之间传递的管道,类似队列。上游组件把Message丢进channel,下游从channel拿消息。
  3. Adapter 适配器 :外部系统和Spring Integration内部消息流水线的桥梁
    • InboundAdapter 入站适配器:外部系统 → 流入Spring应用(收数据)

    • OutboundAdapter 出站适配器:Spring应用 → 发送到外部系统(发数据)

入站链路(Inbound,收消息)

外部系统 →【原始协议报文】→ InboundAdapter

(1). InboundAdapter 和外部系统建立连接(MQTT 就用 Paho 底层)

(2). 接收外部原始数据(MQTT payload、topic 等)

(3). 适配器做协议转换 :把外部原始数据,包装成 Spring Integration 标准Message(MessageHeaders + payload)

(4). 将标准 Message 投递到内部MessageChannel消息通道

(5). 消息通道把 Message 交给下游组件(路由、转换器、MessageHandler 执行业务)

一句话:InboundAdapter 负责【接入、接收、协议转 SI 标准 Message】
出站链路(Outbound,发消息)

SI 内部组件处理完 → MessageChannel → OutboundAdapter →【外部协议报文】→ 外部系统

(1). 业务处理完成后,生成 Spring Integration 标准Message

(2). Message 通过消息通道送到 OutboundAdapter

(3). 适配器反向协议转换 :把 SI 的标准 Message,拆包转换成外部系统能识别的协议报文

(4). 通过底层客户端(MQTT 场景就是 Paho)发送给外部系统(EMQX Broker)

一句话:OutboundAdapter 负责【把 SI 的 Message,转成外部协议并发送出去】

  1. MessageHandler 消息处理器:消息通道下游,拿到Message做处理、转换、路由、业务逻辑。
  2. 其他:消息路由器、转换器、过滤器、聚合器(EIP模式组件)

重点:Spring Integration本身并不内置MQTT能力 !

Spring Integration只是一套通用消息流水线框架。想要对接MQTT,需要单独的扩展模块:spring-integration-mqtt

二、各个组件层级关系(由底层到上层)

复制代码
【最外部】EMQX(MQTT Broker消息服务器)
        ↑↓ MQTT协议(TCP)
【底层客户端】Eclipse Paho Java Client(原生MQTT客户端,处理TCP、心跳、重连、MQTT报文)
        ↑↓
【Spring集成扩展模块】spring-integration-mqtt
        → 它是Spring Integration的一个**适配器扩展包**,封装Paho,提供 MQTT InboundAdapter / MQTT OutboundAdapter
        ↑↓
【核心框架】Spring Integration(通用消息流水线框架,定义Message、MessageChannel、MessageHandler这套消息模型)
        ↑↓
【业务代码】自定义 MessageHandler(我们自己写业务逻辑,解析消息、分流、执行业务)

层级拆解讲解

  1. Eclipse Paho

    纯底层MQTT客户端,和Spring无关,只懂MQTT协议。

    缺点:没有统一消息模型,断线重连、订阅、回调都要手写。

  2. spring-integration-mqtt

    ✅ 属于Spring Integration生态的扩展模块(adapter实现)

    ✅ 底层调用Paho

    ✅ 实现了Spring Integration规范的InboundAdapter

    作用:把Paho收到的原生MQTT消息,转成Spring Integration标准Message,丢进消息通道。

    一句话:spring-integration-mqtt = MQTT专用适配器实现,是Spring Integration众多适配器中的其中一种(还有ftp、jdbc、http、rabbit等适配器)

  3. Spring Integration(父框架)

    定义整套消息流水线规范:Message、通道、适配器、处理器。

    spring-integration-mqtt写的MQTT适配器,必须遵守Spring Integration定义的这套接口规范 。

    不管你接入MQTT还是RabbitMQ,在框架内部,消息都是同一个Message对象,下游MessageHandler写法逻辑统一。

  4. 自定义MessageHandler

    属于Spring Integration下游组件,是我们业务开发写的代码。

    从消息通道拿到框架传过来的Message,做解析、分流业务。

    注意:这个MessageHandler是Spring Integration接口的MessageHandler,不是MQTT专属。

三、完整消息流转(串起所有组件)

仿真设备(MQTT发布者) → EMQX Broker

→ spring-integration-mqtt 的 MQTT InboundAdapter

  • InboundAdapter底层用Paho建立MQTT长连接,订阅主题,接收MQTT消息

  • 将原生Paho消息(payload、topic、qos)封装成 Spring Integration Message

→ 把Message放入 MessageChannel(消息通道)

→ 消息通道把Message交给下游 自定义MessageHandler

→ MessageHandler解析payload,按主题/消息类型分流,执行业务

四、关键区分(容易混淆的点)

  1. Spring Integration ≠ MQTT客户端

    Spring Integration是通用消息流水线框架 ,可以对接各种中间件/外部系统。

    spring-integration-mqtt只是它众多外接适配器的其中一个。

    类似:Spring Integration是水管系统;spring-integration-mqtt是接入MQTT的一个水管接头;Paho是接头里面的底层通信零件。

  2. InboundAdapter 不是Spring Integration独有概念,是EIP通用概念

    spring-integration-mqtt提供的是MQTT实现版本的InboundAdapter 。

    Spring Integration还有别的InboundAdapter:比如FileInboundAdapter读文件、HttpInboundAdapter接收http请求。

  3. MessageHandler是Spring Integration的通用接口

    不管消息来源是MQTT、文件还是HTTP,下游都可以用MessageHandler处理消息。

    我们写的业务处理器,实现的就是Spring Integration的MessageHandler接口。

五、学习思路补充

  1. Spring Integration:重点理解 EIP思想 + Message+MessageChannel+Adapter+MessageHandler这套消息模型,不用死记所有组件。
  2. spring-integration-mqtt:是Spring Integration的MQTT适配器扩展,底层封装Paho。开发时只用这个模块,不直接操作Paho原生API。
  3. Paho:MQTT底层协议客户端,只用来理解原理,业务代码不直接使用。
  4. EMQX:MQTT Broker,消息中转服务器,和Spring无关,只是MQTT服务端。

六、速记口诀

Spring Integration是通用消息流水线,遵循EIP;

spring-integration-mqtt是它的MQTT适配器扩展,底层封装Paho;

InboundAdapter接收MQTT消息转为统一Message;

MessageChannel传递消息,MessageHandler执行业务;

EMQX是MQTT服务端,负责消息转发。

相关推荐
tongyiixiaohuang13 分钟前
供应商主数据同步实战:从易快报到金蝶云星空的单一策略落地
java·网络·数据库
鱼宵1 小时前
取集合第一个元素,Java 为什么要写三种写法?
java·windows·python·java21
学长毕设1 小时前
基于SpringBoot的餐厅管理系统-附源码
java·spring boot·后端
刚入门的大一新生1 小时前
Linux-线程互斥
java·开发语言
赵小哥要冲啦2 小时前
社区邻里互助小程序从 0 到 1 复盘:需求拆解与信任机制设计
java·小程序·需求分析
xiaogai_gai2 小时前
采购业务退款单同步实战:从钉钉审批流到金蝶云星空付款单
java·数据库·钉钉
箓维2 小时前
TCP Socket的进阶实现
网络·笔记·tcp/ip
二哈赛车手2 小时前
新人笔记---hermes定时功能设计,具体讲解以及可优化点
java·人工智能·笔记·spring·ai·typescript
ZWZhangYu2 小时前
从 Dify 实践理解大模型上下文缓存
java·后端·spring
小羊没烦恼!3 小时前
关于分布式锁原理的一些学习与思考-redis分布式锁,zookeeper分布式锁
java·服务器·网络·学习·负载均衡