1、使用服务端订阅功能,需在控制台上进行设置,选择要推送的消息类型。
2、在Maven工程项目中添加依赖,如下所示。
<dependencies> <!-- Aliyun core --> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.3.5</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-iot</artifactId> <version>6.11.0</version> </dependency> <!-- iot message client --> <dependency> <groupId>com.aliyun.openservices</groupId> <artifactId>iot-client-message</artifactId> <version>1.1.3</version> </dependency> <!-- 日志 --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> </dependencies>3、使用自己账号的accessKey、accessSecret、regionId、uid初始化客户端。
// 阿里云accessKey String accessKey = "xxxxxxxxxxxxxxxx"; // 阿里云accessSecret String accessSecret = "xxxxxxxxxxxxxxxxxx"; // regionId String regionId = "cn-shanghai"; // 阿里云uid String uid = "xxxxxxxxxxxxxxx"; // endPoint: https://${uid}.iot-as-http2.${region}.aliyuncs.com String endPoint = "https://" + uid + ".iot-as-http2." + regionId + ".aliyuncs.com"; // 连接配置 Profile profile = Profile.getAccessKeyProfile(endPoint, regionId, accessKey, accessSecret); // 构造客户端 MessageClient client = MessageClientFactory.messageClient(profile);4、设置消息接收接口。
需要注意的是,目前服务端订阅还无法过滤消息,也就是说该账号下的所有产品下的所有设备的消息都会被订阅到(前提是在第一步设置了要推送的消息类型)。
但是可以针对特定Topic发布上来的消息做单独的业务处理(如下面的messageCallback),其他没有设置特殊回调的消息,统一走公共的接口(也就是下面的messageCallbackComm)
MessageCallback messageCallbackComm = new MessageCallback() { @Override public Action consume(MessageToken messageToken) { Message m = messageToken.getMessage(); System.out.println("This is common callback!"); System.out.println("topic : " + m.getTopic()); System.out.println("receive : " + new String(m.getPayload())); System.out.println(" "); return MessageCallback.Action.CommitSuccess; } }; MessageCallback messageCallback = new MessageCallback() { @Override public Action consume(MessageToken messageToken) { Message m = messageToken.getMessage(); System.out.println("topic : " + m.getTopic()); System.out.println("receive : " + new String(m.getPayload())); return MessageCallback.Action.CommitSuccess; } }; String topic = "xxxxxxxxxxxxxxxx"; client.setMessageListener(topic,messageCallback); client.connect(messageCallbackComm);5、举例。
假设代码中的topic设置为设备属性上报的Topic(/sys/${productKey}/${deviceName}/thing/event/property/post)
那么设备进行上报属性的操作,在服务端收到的消息是messageCallback中打印的内容。
对于设备的其他行为(比如上下线),在服务端收到的消息是messageCallbackComm中打印的内容(也就是包括了This is common callback!这句话)
继续阅读与本文标签相同的文章
-
RocketMQ 平滑升级到主从切换
2026-05-21栏目: 教程
-
CSS Content 属性妙用
2026-05-21栏目: 教程
-
微软认输了?微软确认Edge浏览器将换上Google内核
2026-05-21栏目: 教程
-
JavaScript 和 WebAssembly 之间的调用终于变快了!!
2026-05-21栏目: 教程
-
再见 JavaScript, 你好 WebAssembly
2026-05-21栏目: 教程
