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>
相关推荐
小毅&Nora7 小时前
【Java线程安全实战】⑨ CompletableFuture的高级用法:从基础到高阶,结合虚拟线程
java·线程安全·虚拟线程
冰冰菜的扣jio7 小时前
Redis缓存中三大问题——穿透、击穿、雪崩
java·redis·缓存
小璐猪头8 小时前
专为 Spring Boot 设计的 Elasticsearch 日志收集 Starter
java
韩师傅8 小时前
前端开发消亡史:AI也无法掩盖没有设计创造力的真相
前端·人工智能·后端
ps酷教程8 小时前
HttpPostRequestDecoder源码浅析
java·http·netty
闲人编程8 小时前
消息通知系统实现:构建高可用、可扩展的企业级通知服务
java·服务器·网络·python·消息队列·异步处理·分发器
栈与堆8 小时前
LeetCode-1-两数之和
java·数据结构·后端·python·算法·leetcode·rust
superman超哥8 小时前
双端迭代器(DoubleEndedIterator):Rust双向遍历的优雅实现
开发语言·后端·rust·双端迭代器·rust双向遍历
1二山似9 小时前
crmeb多商户启动swoole时报‘加密文件丢失’
后端·swoole
马卡巴卡9 小时前
Java CompletableFuture 接口与原理详解
后端