reactor:【IoT 物联网】合并 messagebus 和 common 包,统一到 core 包

This commit is contained in:
YunaiV 2025-05-29 07:33:34 +08:00
parent 6cf2eb07d7
commit 385cea8d90
21 changed files with 136 additions and 157 deletions

View File

@ -7,19 +7,61 @@
<groupId>cn.iocoder.boot</groupId>
<version>${revision}</version>
</parent>
<modules>
<module>yudao-module-iot-common</module>
<module>yudao-module-iot-message-bus</module>
</modules>
<modelVersion>4.0.0</modelVersion>
<artifactId>yudao-module-iot-core</artifactId>
<packaging>pom</packaging>
<packaging>jar</packaging>
<name>${project.artifactId}</name>
<description>
iot 模块下,提供 iot-biz 和 iot-gateway 模块的核心功能。
例如说:消息总线、消息协议(编解码)等。
iot 模块下,提供 iot-biz 和 iot-gateway 模块的核心功能。例如说:
1. 消息总线:跨 iot-biz 和 iot-gateway 的设备消息。可选择使用 spring event、redis stream、rocketmq、kafka、rabbitmq 等。
2. 查询设备信息的通用 API
</description>
<dependencies>
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-common</artifactId>
</dependency>
<!-- Spring 核心 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- 消息中间件相关(可选依赖) -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
<optional>true</optional>
</dependency>
<!-- 测试依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.module.iot.common.biz;
package cn.iocoder.yudao.module.iot.core.biz;
// TODO @芋艿待实现
public interface IotDeviceCommonApi {

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.module.iot.common.enums;
package cn.iocoder.yudao.module.iot.core.enums;
import cn.iocoder.yudao.framework.common.core.ArrayValuable;
import lombok.Getter;

View File

@ -1,8 +1,9 @@
package cn.iocoder.yudao.module.iot.messagebus.config;
package cn.iocoder.yudao.module.iot.core.messagebus.config;
import cn.iocoder.yudao.module.iot.messagebus.core.IotMessageBus;
import cn.iocoder.yudao.module.iot.messagebus.core.local.LocalIotMessageBus;
import cn.iocoder.yudao.module.iot.messagebus.core.rocketmq.RocketMQIotMessageBus;
import cn.iocoder.yudao.module.iot.core.messagebus.core.IotMessageBus;
import cn.iocoder.yudao.module.iot.core.messagebus.core.local.LocalIotMessageBus;
import cn.iocoder.yudao.module.iot.core.messagebus.core.rocketmq.RocketMQIotMessageBus;
import cn.iocoder.yudao.module.iot.core.mq.producer.IotDeviceMessageProducer;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.spring.autoconfigure.RocketMQProperties;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
@ -24,6 +25,11 @@ import org.springframework.context.annotation.Configuration;
@Slf4j
public class IotMessageBusAutoConfiguration {
@Bean
public IotDeviceMessageProducer deviceMessageProducer(IotMessageBus messageBus) {
return new IotDeviceMessageProducer(messageBus);
}
// ==================== Local 实现 ====================
@Configuration
@ -46,6 +52,7 @@ public class IotMessageBusAutoConfiguration {
public static class RocketMQIotMessageBusConfiguration {
@Bean
@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
public IotMessageBus rocketMQIotMessageBus(RocketMQProperties rocketMQProperties, RocketMQTemplate rocketMQTemplate) {
log.info("[rocketMQIotMessageBus][创建 RocketMQ IoT 消息总线]");
return new RocketMQIotMessageBus(rocketMQProperties, rocketMQTemplate);

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.module.iot.messagebus.config;
package cn.iocoder.yudao.module.iot.core.messagebus.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.module.iot.messagebus.core.local;
package cn.iocoder.yudao.module.iot.core.messagebus.core.local;
import lombok.AllArgsConstructor;
import lombok.Data;

View File

@ -1,8 +1,8 @@
package cn.iocoder.yudao.module.iot.messagebus.core.local;
package cn.iocoder.yudao.module.iot.core.messagebus.core.local;
import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.module.iot.messagebus.core.IotMessageBus;
import cn.iocoder.yudao.module.iot.messagebus.core.IotMessageBusSubscriber;
import cn.iocoder.yudao.module.iot.core.messagebus.core.IotMessageBus;
import cn.iocoder.yudao.module.iot.core.messagebus.core.IotMessageBusSubscriber;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationContext;
@ -12,8 +12,6 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
/**
* 本地的 {@link IotMessageBus} 实现类

View File

@ -1,9 +1,9 @@
package cn.iocoder.yudao.module.iot.messagebus.core.rocketmq;
package cn.iocoder.yudao.module.iot.core.messagebus.core.rocketmq;
import cn.hutool.core.util.TypeUtil;
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
import cn.iocoder.yudao.module.iot.messagebus.core.IotMessageBus;
import cn.iocoder.yudao.module.iot.messagebus.core.IotMessageBusSubscriber;
import cn.iocoder.yudao.module.iot.core.messagebus.core.IotMessageBus;
import cn.iocoder.yudao.module.iot.core.messagebus.core.IotMessageBusSubscriber;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;

View File

@ -1,7 +1,7 @@
package cn.iocoder.yudao.module.iot.common.message;
package cn.iocoder.yudao.module.iot.core.mq.message;
import cn.iocoder.yudao.module.iot.common.enums.IotDeviceMessageIdentifierEnum;
import cn.iocoder.yudao.module.iot.common.enums.IotDeviceMessageTypeEnum;
import cn.iocoder.yudao.module.iot.core.enums.IotDeviceMessageIdentifierEnum;
import cn.iocoder.yudao.module.iot.core.enums.IotDeviceMessageTypeEnum;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;

View File

@ -0,0 +1,48 @@
package cn.iocoder.yudao.module.iot.core.mq.producer;
import cn.iocoder.yudao.module.iot.core.messagebus.core.IotMessageBus;
import cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage;
import lombok.RequiredArgsConstructor;
/**
* IoT 设备消息生产者
*
* @author 芋道源码
*/
@RequiredArgsConstructor
public class IotDeviceMessageProducer {
/**
* 消息总线应用的设备消息 Topic iot-gateway 发给 iot-biz 进行消费
*/
private static final String MESSAGE_BUS_DEVICE_MESSAGE_TOPIC = "iot_device_message";
/**
* 消息总线设备消息 Topic iot-biz 发送给 iot-gateway 的某个 server(protocol) 进行消费
*
* 其中%s 就是该server(protocol) 的标识
*/
private static final String MESSAGE_BUS_GATEWAY_DEVICE_MESSAGE_TOPIC = MESSAGE_BUS_DEVICE_MESSAGE_TOPIC + "/%s";
private final IotMessageBus messageBus;
/**
* 发送设备消息
*
* @param message 设备消息
*/
public void sendDeviceMessage(IotDeviceMessage message) {
messageBus.post(MESSAGE_BUS_DEVICE_MESSAGE_TOPIC, message);
}
/**
* 发送网关设备消息
*
* @param server 网关的 server 标识
* @param message 设备消息
*/
public void sendGatewayDeviceMessage(String server, Object message) {
messageBus.post(String.format(MESSAGE_BUS_GATEWAY_DEVICE_MESSAGE_TOPIC, server), message);
}
}

View File

@ -0,0 +1,2 @@
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
cn.iocoder.yudao.module.iot.core.messagebus.config.IotMessageBusAutoConfiguration

View File

@ -1,8 +1,8 @@
package cn.iocoder.yudao.module.iot.messagebus.core.local;
package cn.iocoder.yudao.module.iot.core.messagebus.core.local;
import cn.iocoder.yudao.module.iot.messagebus.config.IotMessageBusAutoConfiguration;
import cn.iocoder.yudao.module.iot.messagebus.core.IotMessageBus;
import cn.iocoder.yudao.module.iot.messagebus.core.IotMessageBusSubscriber;
import cn.iocoder.yudao.module.iot.core.messagebus.config.IotMessageBusAutoConfiguration;
import cn.iocoder.yudao.module.iot.core.messagebus.core.IotMessageBus;
import cn.iocoder.yudao.module.iot.core.messagebus.core.IotMessageBusSubscriber;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;

View File

@ -1,17 +1,14 @@
package cn.iocoder.yudao.module.iot.messagebus.core.rocketmq;
package cn.iocoder.yudao.module.iot.core.messagebus.core.rocketmq;
import cn.hutool.core.util.IdUtil;
import cn.iocoder.yudao.module.iot.messagebus.config.IotMessageBusAutoConfiguration;
import cn.iocoder.yudao.module.iot.messagebus.core.IotMessageBus;
import cn.iocoder.yudao.module.iot.messagebus.core.IotMessageBusSubscriber;
import cn.iocoder.yudao.module.iot.messagebus.core.TestMessage;
import cn.iocoder.yudao.module.iot.core.messagebus.config.IotMessageBusAutoConfiguration;
import cn.iocoder.yudao.module.iot.core.messagebus.core.IotMessageBus;
import cn.iocoder.yudao.module.iot.core.messagebus.core.IotMessageBusSubscriber;
import cn.iocoder.yudao.module.iot.core.messagebus.core.TestMessage;
import jakarta.annotation.Resource;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.spring.autoconfigure.RocketMQAutoConfiguration;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.Import;
import org.springframework.test.context.TestPropertySource;

View File

@ -1,26 +0,0 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>yudao-module-iot-core</artifactId>
<groupId>cn.iocoder.boot</groupId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>yudao-module-iot-common</artifactId>
<packaging>jar</packaging>
<name>${project.artifactId}</name>
<description>
iot 模块下,提供通用的功能。
1. 跨 iot-biz 和 iot-gateway 的设备消息
2. 查询设备信息的通用 API
</description>
<dependencies>
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-common</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -1,22 +0,0 @@
package cn.iocoder.yudao.module.iot.common.enums;
/**
* IoT 通用的枚举
*
* @author 芋道源码
*/
public interface IotCommonConstants {
/**
* 消息总线应用的设备消息 Topic iot-gateway 发给 iot-biz 进行消费
*/
String MESSAGE_BUS_DEVICE_MESSAGE_TOPIC = "iot_device_message";
/**
* 消息总线设备消息 Topic iot-biz 发送给 iot-gateway 的某个 server(protocol) 进行消费
*
* 其中%s 就是该server(protocol) 的标识
*/
String MESSAGE_BUS_GATEWAY_DEVICE_MESSAGE_TOPIC = MESSAGE_BUS_DEVICE_MESSAGE_TOPIC + "/%s";
}

View File

@ -1,65 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>yudao-module-iot-core</artifactId>
<groupId>cn.iocoder.boot</groupId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>yudao-module-iot-message-bus</artifactId>
<packaging>jar</packaging>
<name>${project.artifactId}</name>
<description>
iot 模块下,提供消息总线的功能。
可选择使用 spring event、redis stream、rocketmq、kafka、rabbitmq 等。
</description>
<dependencies>
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-common</artifactId>
</dependency>
<!-- Spring 核心 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- 消息中间件相关(可选依赖) -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
<optional>true</optional>
</dependency>
<!-- 测试依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>

View File

@ -1,2 +0,0 @@
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
cn.iocoder.yudao.module.iot.messagebus.config.IotMessageBusAutoConfiguration