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>