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

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

第一步 添加pom依赖

		<!-- 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的地址

camel:
  component:
    paho:
      broker-url: tcp://localhost:1883

第三步 业务处理

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);
    }
}

第四步 主题路由处理

@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用上面内容没有问题,往项目里引入的时候,添加上面依赖下载不下依赖,后来发现是我的项目中的pom里添加了repositories节点导致我的依赖没有下载下来,把这个注释掉,或者把仓库地址添加到节点中可以解决

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐