导入SDK

  1. 前往下载SDK;然后你回获得SDK对应jar包和SDK
    SDK: ysmq-subscribe-sdk-1.0.2-RELEASE.jar
    demo: ysmq-subscribe-sdk-demo-1.0.1.rar

  2. 解压sdk-demo的压缩包. 解压后导入Eclipse/Intellij,导入后如图所示:

image

这时候项目是有错的,因为没有导入sdk的jar包.

  1. 导入SDK的依赖: pom结构如下:
    <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <slf4j-version>1.7.25</slf4j-version>
    </properties>
    <dependencies>
    <!-- http -->
       <dependency>
           <groupId>com.squareup.okhttp3</groupId>
           <artifactId>okhttp</artifactId>
           <version>3.9.1</version>
       </dependency>
       <dependency>
         <groupId>com.alibaba</groupId>
         <artifactId>fastjson</artifactId>
         <version>1.2.39</version>
       </dependency>
    <!-- slf4j -->
     <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>${slf4j-version}</version>
     </dependency>
     </dependencies>

主要依赖三个包:

依赖项目 作用
okHttp http请求
fastjson json解析
slf4j-log4j12 日志框架
  1. 在项目中导入sdk的 jar包.

右键项目选择 Build path -> Configure Build path,如图: image 选择Add External JARs... 选择你放jar包的位置,导入即可:

image

导入后,项目如图:

image

已经没有报错了,sdk demo 中有四个类. log4j是slf4j日志框架的配置文件.

SDK使用

我们先来看看demo中的这个类:ReadCommitMessagePatternMain

1.首先是一些基本的配置:

    // 设置你的appKey
    private static String appKey = "";
    // 设置你的appSecret
    private static String appSecret = "";
    // 设置group,group只能是group1->group5,其他会报出参数错误
    private static String group = "group3";
    // 打印日志的log可以适配你自己的打印日志的框架.
    private static Log log = LogFactory.getLog(ReadCommitMessagePatternMain.class);
  1. 初始化StandardConsumerMessage 类,在这个类中设置你的消费消息的回调接口:
    public static void init() {
        // 设置你的appkey,appSecret,group
        StandardConsumerMessage consumerMessage = new StandardConsumerMessage(appKey, appSecret, group);
        // 设置调用接口的间隔时间,ms
        consumerMessage.setConsumeIntervalTime(1000);
        // 设置消费消息的回调接口,建议把消息放入本地队列,不要在回调函数里做业务处理.
        consumerMessage.setConsumerCallBack(new ConsumerCallBack() {
            public void consumerCall(List<Object> msg) {
                if (msg.size() > 100) {
                    // 消息太多,只打印前100个
                    log.info("msgSize:{},msg:{}", msg.size(), msg.subList(0, 100));
                } else {
                    log.info("msgSize:{},msg:{}", msg.size(), msg);
                }
                for (Object object : msg) {
                    // class com.alibaba.fastjson.JSONObject
                    log.info("my readMessageHandle object:{},class:{}", object, object.getClass());
                }
            }
        });
        consumerMessage.initClient();
    }

注意代码中的 consumerMessage.setConsumerCallBack() 方法,在这里边设置你消费消息的回调函数.

    /**
    * <p>
    * 消费消息的回调
    * </p>
    */
    public interface ConsumerCallBack {
      void consumerCall(List<Object> msg);
    }

回调接口中的 void consumerCall(List msg);–> 实现这个接口实现自己的业务逻辑. 回调函数的参数是接收到的消息: List msg.这个是消息的列表.

下边是一个自定义回调接口的简单示例:

    new ConsumerCallBack() {
            public void consumerCall(List<Object> msg) {
                if (msg != null) {
                    if (msg.size() > 100) {
                        // 消息太多,只打印前100个
                        log.info("msgSize:{},msg:{}", msg.size(), msg.subList(0, 100));
                    } else {
                        log.info("msgSize:{},msg:{}", msg.size(), msg);
                    }
                    for (Object object : msg) {
                        // class com.alibaba.fastjson.JSONObject
                        log.info("my readMessageHandle object:{},class:{}", object, object.getClass());
                    }
                }
            }
        }

Object的类是com.alibaba.fastjson.JSONObject 这个类

是一个json格式的对象:

    public class JSONObject extends JSON implements Map<String, Object>

这个JSONObject 里边具体的结构如下:

    {
        "header": {
                "type": "device",//用户订阅的消息类型
                "deviceId": "427734203",//设备序列号
                "channelNo":"1"//设备通道号
                },
        "content": {//设备上传的消息,原封不动的放在这里
                "test": "msg_content"
                }
    }

header ---> 消息头

content -->设备上传的消息

附录:消息字段返回字段

type为ys.alarm即表示萤石云告警消息,以下是告警消息结构体:

字段名 类型 描述
header Object 设备信息
type String 消息类型:ys.alarm表示设备告警消息
deviceId String 设备序列号
channelNo String 设备通道号
messageId String 消息唯一ID
body Object 设备上传的消息
devSerial String 设备序列号
channel Integer 设备通道号
channelType Integer 设备通道类型: 1-视频通道信息; 2-IO通道
alarmType String 告警类型, 见 附录:萤石设备告警消息类型
alarmId String 设备自己生成的UUID, 用来标识唯一的告警,统一告警的开始、结束采用统一alarmId
relationId String 告警关联ID,由发起联动方产生,用来表示联动的关联关系
status Integer 告警状态 1-开始
location String 告警位置信息:长度不能超过80字节
describe String 告警描述,需要推送给客户的信息
alarmTime String 告警时间,格式: yyyy-MM-ddTHH:mm:ss
customType String 自定义协议类型,命名规则:设备型号_协议标识 如:CS-A1-32W_XX
crypt Integer 图片加密类型:0-不加密,1-用户加密,2-平台加密
requestTime Long 服务端记录的请求时间
pictureList List 告警图片相关信息
shortUrl String 告警图片短地址
id String 平台生成的告警Id
url String 告警图片URL

type为ys.onoffline即表示萤石云上下线消息,以下是上下线消息结构体:

字段名 类型 描述
header Object 设备信息
type String 消息类型:ys.onoffline表示设备上下线消息
deviceId String 设备序列号
channelNo String 设备通道号
messageId String 消息唯一ID
body Object 设备上传的消息
subSerial String 设备序列号
occurTime String 设备上线(离线)时间,格式: yyyy-MM-dd HH:mm:ss
regTime String 设备上一次注册时间,格式: yyyy-MM-dd HH:mm:ss
natIp String 设备外网IP
devType String 设备类型
deviceName String 设备名称
msgType String 消息类型:OFFLINE-设备离线消息,ONLINE-设备上线消息

results matching ""

    No results matching ""