reactor:【IoT 物联网】将 http component 合并到 gateway 里
This commit is contained in:
@@ -22,6 +22,6 @@ public interface IotMessageBus {
|
||||
*
|
||||
* @param subscriber 订阅者
|
||||
*/
|
||||
void register(IotMessageBusSubscriber<?> subscriber);
|
||||
void register(IotMessageSubscriber<?> subscriber);
|
||||
|
||||
}
|
||||
@@ -7,7 +7,7 @@ package cn.iocoder.yudao.module.iot.core.messagebus.core;
|
||||
*
|
||||
* @author 芋道源码
|
||||
*/
|
||||
public interface IotMessageBusSubscriber<T> {
|
||||
public interface IotMessageSubscriber<T> {
|
||||
|
||||
/**
|
||||
* @return 主题
|
||||
@@ -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) {
|
||||
|
||||
@@ -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()));
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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() {
|
||||
|
||||
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user