reactor:【IoT 物联网】将 http component 合并到 gateway 里

This commit is contained in:
YunaiV
2025-06-01 07:48:30 +08:00
parent 81cbc61f3c
commit c3485a3f3d
46 changed files with 524 additions and 922 deletions

View File

@@ -22,6 +22,6 @@ public interface IotMessageBus {
*
* @param subscriber 订阅者
*/
void register(IotMessageBusSubscriber<?> subscriber);
void register(IotMessageSubscriber<?> subscriber);
}

View File

@@ -7,7 +7,7 @@ package cn.iocoder.yudao.module.iot.core.messagebus.core;
*
* @author 芋道源码
*/
public interface IotMessageBusSubscriber<T> {
public interface IotMessageSubscriber<T> {
/**
* @return 主题

View File

@@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.iot.core.messagebus.core.local;
import cn.hutool.core.collection.CollUtil;
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.IotMessageSubscriber;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationContext;
@@ -30,7 +30,7 @@ public class LocalIotMessageBus implements IotMessageBus {
* 订阅者映射表
* Key: topic
*/
private final Map<String, List<IotMessageBusSubscriber<?>>> subscribers = new HashMap<>();
private final Map<String, List<IotMessageSubscriber<?>>> subscribers = new HashMap<>();
@Override
public void post(String topic, Object message) {
@@ -38,9 +38,9 @@ public class LocalIotMessageBus implements IotMessageBus {
}
@Override
public void register(IotMessageBusSubscriber<?> subscriber) {
public void register(IotMessageSubscriber<?> subscriber) {
String topic = subscriber.getTopic();
List<IotMessageBusSubscriber<?>> topicSubscribers = subscribers.computeIfAbsent(topic, k -> new ArrayList<>());
List<IotMessageSubscriber<?>> topicSubscribers = subscribers.computeIfAbsent(topic, k -> new ArrayList<>());
topicSubscribers.add(subscriber);
log.info("[register][topic({}/{}) 注册消费者({})成功]",
topic, subscriber.getGroup(), subscriber.getClass().getName());
@@ -50,11 +50,11 @@ public class LocalIotMessageBus implements IotMessageBus {
@SuppressWarnings({"unchecked", "rawtypes"})
public void onMessage(LocalIotMessage message) {
String topic = message.getTopic();
List<IotMessageBusSubscriber<?>> topicSubscribers = subscribers.get(topic);
List<IotMessageSubscriber<?>> topicSubscribers = subscribers.get(topic);
if (CollUtil.isEmpty(topicSubscribers)) {
return;
}
for (IotMessageBusSubscriber subscriber : topicSubscribers) {
for (IotMessageSubscriber subscriber : topicSubscribers) {
try {
subscriber.onMessage(message.getMessage());
} catch (Exception ex) {

View File

@@ -3,7 +3,7 @@ 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.core.messagebus.core.IotMessageBus;
import cn.iocoder.yudao.module.iot.core.messagebus.core.IotMessageBusSubscriber;
import cn.iocoder.yudao.module.iot.core.messagebus.core.IotMessageSubscriber;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
@@ -47,7 +47,7 @@ public class RocketMQIotMessageBus implements IotMessageBus {
@Override
@SneakyThrows
public void register(IotMessageBusSubscriber<?> subscriber) {
public void register(IotMessageSubscriber<?> subscriber) {
Type type = TypeUtil.getTypeArgument(subscriber.getClass(), 0);
if (type == null) {
throw new IllegalStateException(String.format("类型(%s) 需要设置消息类型", getClass().getName()));

View File

@@ -1,8 +1,8 @@
package cn.iocoder.yudao.module.iot.core.mq.message;
import cn.hutool.core.util.IdUtil;
import cn.iocoder.yudao.module.iot.core.enums.IotDeviceMessageIdentifierEnum;
import cn.iocoder.yudao.module.iot.core.enums.IotDeviceMessageTypeEnum;
import cn.iocoder.yudao.module.iot.core.util.IotCoreUtils;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@@ -119,7 +119,7 @@ public class IotDeviceMessage {
String requestId, LocalDateTime reportTime,
String serverId, Long tenantId) {
if (requestId == null) {
requestId = IdUtil.fastSimpleUUID();
requestId = IotCoreUtils.generateRequestId();
}
if (reportTime == null) {
reportTime = LocalDateTime.now();

View File

@@ -0,0 +1,29 @@
package cn.iocoder.yudao.module.iot.core.util;
import cn.hutool.core.util.IdUtil;
import cn.hutool.system.SystemUtil;
/**
* IoT 核心模块的工具类
*
* @author 芋道源码
*/
public class IotCoreUtils {
/**
* 生成服务器编号
*
* @param serverPort 服务器端口
* @return 服务器编号
*/
public static String generateServerId(Integer serverPort) {
String serverId = String.format("%s.%d", SystemUtil.getHostInfo().getAddress(), serverPort);
// 避免一些场景无法使用 . 符号,例如说 RocketMQ Topic
return serverId.replaceAll("\\.", "_");
}
public static String generateRequestId() {
return IdUtil.fastSimpleUUID();
}
}

View File

@@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.iot.core.messagebus.core.local;
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.IotMessageSubscriber;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
@@ -47,7 +47,7 @@ public class LocalIotMessageBusIntegrationTest {
AtomicInteger subscriber2Count = new AtomicInteger(0);
// 创建第一个订阅者
IotMessageBusSubscriber<String> subscriber1 = new IotMessageBusSubscriber<>() {
IotMessageSubscriber<String> subscriber1 = new IotMessageSubscriber<>() {
@Override
public String getTopic() {
@@ -69,7 +69,7 @@ public class LocalIotMessageBusIntegrationTest {
};
// 创建第二个订阅者
IotMessageBusSubscriber<String> subscriber2 = new IotMessageBusSubscriber<>() {
IotMessageSubscriber<String> subscriber2 = new IotMessageSubscriber<>() {
@Override
public String getTopic() {
@@ -120,7 +120,7 @@ public class LocalIotMessageBusIntegrationTest {
CountDownLatch latch = new CountDownLatch(2);
// 创建订阅者 1 - 只订阅设备状态
IotMessageBusSubscriber<String> statusSubscriber = new IotMessageBusSubscriber<>() {
IotMessageSubscriber<String> statusSubscriber = new IotMessageSubscriber<>() {
@Override
public String getTopic() {
@@ -141,7 +141,7 @@ public class LocalIotMessageBusIntegrationTest {
};
// 创建订阅者 2 - 只订阅设备数据
IotMessageBusSubscriber<String> dataSubscriber = new IotMessageBusSubscriber<>() {
IotMessageSubscriber<String> dataSubscriber = new IotMessageSubscriber<>() {
@Override
public String getTopic() {

View File

@@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.iot.core.messagebus.core.rocketmq;
import cn.hutool.core.util.IdUtil;
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.IotMessageSubscriber;
import cn.iocoder.yudao.module.iot.core.messagebus.core.TestMessage;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
@@ -59,7 +59,7 @@ public class RocketMQIotMessageBusTest {
messageBus.post(topic, testMessage);
// 创建订阅者
IotMessageBusSubscriber<String> subscriber1 = new IotMessageBusSubscriber<>() {
IotMessageSubscriber<String> subscriber1 = new IotMessageSubscriber<>() {
@Override
public String getTopic() {
@@ -117,7 +117,7 @@ public class RocketMQIotMessageBusTest {
messageBus.post(topic, testMessage);
// 创建第一个订阅者
IotMessageBusSubscriber<TestMessage> subscriber1 = new IotMessageBusSubscriber<>() {
IotMessageSubscriber<TestMessage> subscriber1 = new IotMessageSubscriber<>() {
@Override
public String getTopic() {
@@ -141,7 +141,7 @@ public class RocketMQIotMessageBusTest {
};
// 创建第二个订阅者
IotMessageBusSubscriber<TestMessage> subscriber2 = new IotMessageBusSubscriber<>() {
IotMessageSubscriber<TestMessage> subscriber2 = new IotMessageSubscriber<>() {
@Override
public String getTopic() {
@@ -204,7 +204,7 @@ public class RocketMQIotMessageBusTest {
messageBus.post(topic2, message2);
// 创建订阅者 1 - 只订阅设备状态
IotMessageBusSubscriber<String> statusSubscriber = new IotMessageBusSubscriber<>() {
IotMessageSubscriber<String> statusSubscriber = new IotMessageSubscriber<>() {
@Override
public String getTopic() {
@@ -227,7 +227,7 @@ public class RocketMQIotMessageBusTest {
};
// 创建订阅者 2 - 只订阅设备数据
IotMessageBusSubscriber<String> dataSubscriber = new IotMessageBusSubscriber<>() {
IotMessageSubscriber<String> dataSubscriber = new IotMessageSubscriber<>() {
@Override
public String getTopic() {