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服务端,负责消息转发。

相关推荐
小蜗牛狂飙记1 小时前
java环境一键配置和切换的ui工具
java
逆光的July1 小时前
可靠消息投递与消费的工程设计:Outbox、幂等、死信兜底
java
ACP广源盛139246256731 小时前
Type-C 扩展坞方案选型笔记|国产 DP1.2 转 HDMI2.0 桥接芯片 GSV2201D@ACP 评估
开发语言·笔记·硬件架构·硬件工程·hdmi·国产芯片
bro_Java6661 小时前
《二叉树的基础知识、操作方法与代码示例》
java·数据结构·算法·广度优先
旖旎夜光1 小时前
【LangGraph实战】LangGraph 学习笔记(四):持久化——从线程记忆到跨会话长期记忆
人工智能·笔记·python·学习·ai编程·langgraph
dishugj2 小时前
HANA集群计划内切换与维护操作
java·linux·数据库
kdxiaojie2 小时前
MPU6050学习
笔记·学习·mpu6050
yuniko-n2 小时前
【JUC】线程间通信
java·开发语言
yuniko-n2 小时前
【JUC】关于 Java 线程介绍
java·开发语言