目前报警模块的设计是使用服务端AMQP的转发,并在监听的地方进行报警逻辑处理。
但是如果一旦产生了报警信息,就需要将消息发送出去,故想设计一个系统级别的报警topic。
增加内容:
String EVENT_ALARM_POST = TOPIC_PREFIX + "thing/event/alarm/post";
String THING_EVENT_ALARM_POST = "thing.event.alarm.post";
上面配置完毕之后增加了如下类:
public class EventAlarmPostFunction implements IDeviceFunction<DataReq<Map<String, Object>>>
但是发现产生报警之后使用发送消息之后,无法进入到该类中。
已经在iot_topic表中增加了:
一旦报警发生之后,通过如下方法发送:
private void publishTask(MqttClient client, String topic, Object data) {
CompletableFuture.runAsync(() -> {
try {
client.publish(topic, JsonUtil.toJsonBytes(data));
} catch (Exception e) {
log.error("Failed to publish task", e);
}
});
}
自定义topic后,监听器的写法可参考: https://iot.bladex.cn/feature/link/topic.html
把你的Function配置提供一下
因为我不是使用custom方式,所以就直接在数据库中增加了topic,没有通过界面配置topic。请问你所说 的Function在什么?我所做的工作都如前所述。
我觉得就是有个引用这个监听类的地方。
逻辑一样,只是前缀不一样而已,按照这个文档操作就行
(topic = .,method = .) <<<, >>> { ; ; () { .(., .(.)); } () { ; } (, , <, > , <<, >> ) { = + ; <, > = .getParams(); (== || .isEmpty()) { .error(, .getId()); fail(, , , .); ; } { .info(, ); .saveDeviceProperty(, ); success(, , ); } () { .error(, .getId(), ); fail(, , , .); } } }
Function的执行逻辑在这里,可以打断点看下是否执行到你自定义的Function
代码进入之后并没有执行execDeviceFunction方法。
这是一个循环,往上看看,他会找到所有function,并且匹配
一共是2 个监听,但是都没有进去方法。
你看下最上面那个方法,里面有一个functionManager.get,看看这个方法返回列表是什么,有没有你定义的Function在
如下是调试时候的界面,里面没有我定义的 方法。
问题已解决。
原因是的topic前面少个/
扫一扫访问 Blade技术社区 移动端