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>
相关推荐
辰海Coding1 小时前
MiniSpring框架学习-完成的 IoC 容器
java·spring boot·学习·架构
小小编程路1 小时前
C++ 多线程与并发
java·jvm·c++
AI视觉网奇1 小时前
linux 检索库 判断库是否支持
java·linux·服务器
zhangxingchao1 小时前
多 Agent 架构到底怎么选?从 Claude Agent Teams、Cognition/Devin 到工程落地原则
前端·人工智能·后端
IT_陈寒1 小时前
SpringBoot那个自动配置的坑,害我排查到凌晨三点
前端·人工智能·后端
ServBay1 小时前
OpenCode 和它的7款必备插件
后端·github·ai编程
ping某1 小时前
逐字节拆解 tcpdump
后端
阿凡9807301 小时前
花 100 dollar,用 Claude 打通 EasyEDA&Fusion 双向同步
后端·程序员
irving同学462382 小时前
从零搭建生产级 RAG:Embedding、Chunking、Hybrid Search 与 Reranker
前端·后端
她的男孩2 小时前
从零搭一个企业后台,为什么我把能力拆成 Starter 和 Plugin
java·后端·架构