报警模块的topic的设计

IOT 已结 1 172

目前报警模块的设计是使用服务端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表中增加了:

image.png 

一旦报警发生之后,通过如下方法发送:

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);
       }
    });
}

 


1条回答
  •  admin
    admin (最佳回答者)
    2024-10-29 09:44

    自定义topic后,监听器的写法可参考: https://iot.bladex.cn/feature/link/topic.html


    把你的Function配置提供一下

    作者追问:2024-10-29 09:44

    因为我不是使用custom方式,所以就直接在数据库中增加了topic,没有通过界面配置topic。请问你所说 的Function在什么?我所做的工作都如前所述。

    我觉得就是有个引用这个监听类的地方。

    回答: 2024-10-29 09:44

    逻辑一样,只是前缀不一样而已,按照这个文档操作就行

    作者追问:2024-10-29 09:44

    (topic = .,method = .)
    <<<, >>> {
    
        ;
    
        ;
    
        () {
           .(., .(.));
        }
    
        () {
           ;
        }
        (, , <, > , <<, >> ) {
           = + ;
           <, > = .getParams();
           (== || .isEmpty()) {
              .error(, .getId());
              fail(, , , .);
              ;
           }
           {
              .info(, );
              .saveDeviceProperty(, );
              success(, , );
           } () {
              .error(, .getId(), );
              fail(, , , .);
           }
        }
    }


    作者追问:2024-10-29 09:44

    image.png

    回答: 2024-10-29 09:44

    Function的执行逻辑在这里,可以打断点看下是否执行到你自定义的Function

    CleanShot20241029104407@2x.png

    作者追问:2024-10-29 09:44

    代码进入之后并没有执行execDeviceFunction方法。

    image.png

    回答: 2024-10-29 09:44

    这是一个循环,往上看看,他会找到所有function,并且匹配

    作者追问:2024-10-29 09:44

    一共是2 个监听,但是都没有进去方法。

    image.png

    回答: 2024-10-29 09:44

    你看下最上面那个方法,里面有一个functionManager.get,看看这个方法返回列表是什么,有没有你定义的Function在

    作者追问:2024-10-29 09:44

    如下是调试时候的界面,里面没有我定义的 方法。

    image.png

    作者追问:2024-10-29 09:44

    问题已解决。

    原因是的topic前面少个/

    0 讨论(1)
提交回复