Springboot 集成apache-camel +mqtt 根据主题处理mqtt消息

Apache Camel 是一个开源的 企业集成模式(Enterprise Integration Patterns, EIP) 实现框架,用于简化系统之间数据交换、协议转换和消息路由的开发。它基于 Java 构建,但支持与 Spring、Quarkus、Micronaut 等多种框架无缝集成,并提供对 300+ 协议和数据格式的开箱即用支持。

废话不多说,直接上干货。

第一步 添加pom依赖

java 复制代码
		<!-- Apache Camel Spring Boot Starter -->
		<dependency>
			<groupId>org.apache.camel.springboot</groupId>
			<artifactId>camel-spring-boot-starter</artifactId>
			<version>4.8.0</version>
		</dependency>

		<!-- Camel Paho MQTT Component -->
		<dependency>
			<groupId>org.apache.camel.springboot</groupId>
			<artifactId>camel-paho-starter</artifactId>
			<version>4.8.0</version>
		</dependency>

说明:我这里演示使用的是MQTT所有引入的是MQTT相关依赖,camel还支持其他的类型activemq, kafka, rabbitmq具体的根据实际情况引入。

第二步 添加yml配置

在yml中配置mq的地址

java 复制代码
camel:
  component:
    paho:
      broker-url: tcp://localhost:1883

第三步 业务处理

java 复制代码
public interface TemperatureService {
    void handleTemperatureData(String payload);
}

@Service
public class TemperatureServiceImpl    implements TemperatureService {
    @Override
    public void handleTemperatureData(String payload) {
        System.out.println("TemperatureServiceImpl.handleTemperatureData==>"+ payload);
    }
}

第四步 主题路由处理

java 复制代码
@Component
public class MqttRouteBuilder extends RouteBuilder {

    @Autowired
    private TemperatureService temperatureService;



    @Override
    public void configure() throws Exception {
        // 方式1:为每个主题单独定义路由(推荐,清晰)
        from("paho:topic/sensor/temperature?brokerUrl=tcp://localhost:1883")
                .routeId("temperature-route")
                .log("收到温度消息: ${body}")
                .bean(temperatureService, "handleTemperatureData(${body})");


        // 方式2:通配符 + 动态路由(适合主题较多时)
        /*
        from("paho:topic/sensor/#?brokerUrl=tcp://localhost:1883")
            .choice()
                .when(header("CamelPahoTopic").isEqualTo("topic/sensor/temperature"))
                    .bean(temperatureService, "handleTemperatureData(${body})")
                .when(header("CamelPahoTopic").isEqualTo("topic/sensor/humidity"))
                    .bean(humidityService, "handleHumidityData(${body})")
                .otherwise()
                    .log("未知主题: ${header.CamelPahoTopic}")
            .end();
        */
    }
}

我写的demo用上面内容没有问题,往项目里引入的时候,添加上面依赖找不到对应的类,不知道是版本的问题还是啥问题,解决办法就是替换依赖为下面的

java 复制代码
        <!-- Camel Core -->
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-core</artifactId>
            <version>3.20.0</version>
        </dependency>

        <!-- 如果使用 Spring Boot -->
        <dependency>
            <groupId>org.apache.camel.springboot</groupId>
            <artifactId>camel-paho-starter</artifactId>
            <version>3.20.0</version>
        </dependency>
相关推荐
葫芦和十三13 小时前
图解 MongoDB 19|Oplog:复制的真正载体,不是文档是操作
后端·mongodb·agent
葫芦和十三13 小时前
图解 MongoDB 20|复制延迟与 catch up:Secondary 为什么跟不上
后端·mongodb·agent
IT_陈寒17 小时前
SpringBoot自动配置的坑,我的API突然就404了
前端·人工智能·后端
ServBay18 小时前
为什么说 MCP 是 2026 年开发者必须掌握的黄金协议?
后端·mcp
程序员夏洛18 小时前
Spring Boot 多模块项目中 IDEA 提示 Cannot resolve symbol 的一次排查记录
后端
子兮曰18 小时前
OpenMontage 深度解剖:你的 AI 编程助手,其实是个视频工作室
前端·后端·ai编程
子兮曰19 小时前
前端工具链的「Rust 化」:一场没有赢家的军备竞赛?
前端·后端·rust
爱勇宝20 小时前
从 Ctrl+CV 到 Enter:程序员正在失去什么
前端·后端·程序员
码事漫谈20 小时前
EdgeOne Makers + WorkBuddy:零基础也能快速搭建可上线的 AI 智能体(附图文教程)
后端