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>
相关推荐
文丑颜不良啊18 分钟前
LeetCode1461~1480题目解析
java·leetcode
2301_780789668 小时前
跨平台适配!SDK 游戏盾兼容全终端游戏场景
java·网络·ddos
学长毕设9 小时前
基于springboot的食品仓库管理系统
java·spring boot·后端
滴滴答答哒9 小时前
ASP.NET Core + FaceRecognitionDotNet 人脸识别实战:DI 单例、特征向量持久化与 1:N 比对
后端·asp.net
步行cgn9 小时前
FormHttpMessageConverter 详解:Spring MVC 中表单数据的读写转换器
java·spring·mvc
龙亘川9 小时前
构建城市公共安全数字底座:亘川智城智慧安防系统全维度解读
java·大数据·开发语言·人工智能·信息可视化
金銀銅鐵9 小时前
[Java] 用 CLI 展示 EnumMap 增删键值对时的内部变化
java·源码·ai编程
秋天的怀念_David10 小时前
第二十二夜 · 数字迷雾
java·程序人生·算法
Raas10010 小时前
AI网关部署方案?从部署到上线全流程
java·开发语言·人工智能·gateway·ai网关·企业级ai网关·企业级ai产品
niucloud-admin11 小时前
NIUCLOUD PHP SAAS上门家政使用文档:城市管理
java·前端·php