目前报警模块的设计是使用服务端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前面少个/