基于Topic消息路由的M2M设备间通信Node JS SDK 示例

概述

M2M(即Machine-to-Machine)是一种端对端通信技术。本章节以Node JS SDK为例,使用基于Topic消息路由的M2M设备间通信,主要介绍如何基于物联网平台构建一个M2M设备间通信架构。

实验步骤


第一部分:配置相关

1、产品、设备、Topic的创建参考链接

消息路由建立

本部分目前不支持门户直接配置,需要基于管理API: CreateTopicRouteTable 来建立消息路由关系。

测试可以直接使用OpenAPI来快速实现相关功能,本地集成相关功能直接基于SDK即可。

2、JAVA SDK Demo

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.iot.model.v20170420.CreateTopicRouteTableRequest;
import com.aliyuncs.iot.model.v20170420.CreateTopicRouteTableResponse;
import com.aliyuncs.profile.DefaultProfile;
import com.google.gson.Gson;
import java.util.*;public class CreateTopicRouteTable {public static void main(String[] args) {DefaultProfile profile = DefaultProfile.getProfile("cn-shanghai", "LTAIOZZg********", "v7CjUJCMk7j9aKduMAQLjy********");IAcsClient client = new DefaultAcsClient(profile);CreateTopicRouteTableRequest request = new CreateTopicRouteTableRequest();request.setRegionId("cn-shanghai");List<String> dstTopicList = new ArrayList<String>();dstTopicList.add("/a12OcQ4****/device2/user/RouteData");request.setDstTopics(dstTopicList);request.setSrcTopic("/a12OcQ4****/device1/user/RouteData");try {CreateTopicRouteTableResponse response = client.getAcsResponse(request);System.out.println(new Gson().toJson(response));} catch (ServerException e) {e.printStackTrace();} catch (ClientException e) {System.out.println("ErrCode:" + e.getErrCode());System.out.println("ErrMsg:" + e.getErrMsg());System.out.println("RequestId:" + e.getRequestId());}}
}

注意:SDK版本差异按照实际版本调整即可。

3、查询路由关系

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.iot.model.v20170420.QueryTopicRouteTableRequest;
import com.aliyuncs.iot.model.v20170420.QueryTopicRouteTableResponse;
import com.aliyuncs.profile.DefaultProfile;
import com.google.gson.Gson;public class QueryTopicRouteTable {public static void main(String[] args) {DefaultProfile profile = DefaultProfile.getProfile("cn-shanghai", "LTAIOZZgY********", "v7CjUJCMk7j9aKduMAQLjy********");IAcsClient client = new DefaultAcsClient(profile);QueryTopicRouteTableRequest request = new QueryTopicRouteTableRequest();request.setRegionId("cn-shanghai");request.setTopic("/a12OcQ4****/device1/user/RouteData");try {QueryTopicRouteTableResponse response = client.getAcsResponse(request);System.out.println(new Gson().toJson(response));} catch (ServerException e) {e.printStackTrace();} catch (ClientException e) {System.out.println("ErrCode:" + e.getErrCode());System.out.println("ErrMsg:" + e.getErrMsg());System.out.println("RequestId:" + e.getRequestId());}}
}

运行结果

{"requestId":"9404FD71-7461-478E-B064-0AEB15C91111","success":true,"dstTopics":["/a12OcQ4****/device2/user/RouteData"]}

第二部分:客户端代码相关

4、Node JS SDK安装参考链接

5、设备端业务代码

device1


// node引入包名
const iot = require('alibabacloud-iot-device-sdk');
// 浏览器、微信小程序,支付宝小程序引入./dist编译的js文件
// const iot = require('./dist/alibabacloud-iot-device-sdk.js');
// js版本下载地址:
//    https://github.com/aliyun/alibabacloud-iot-device-sdk/tree/master/dist  或
//    alibabacloud-iot-device-sdk.js 下载地址 https://unpkg.com/alibabacloud-iot-device-sdk@1.2.4/dist/alibabacloud-iot-device-sdk.js  或
//    alibabacloud-iot-device-sdk.min.js 下载地址 https://unpkg.com/alibabacloud-iot-device-sdk@1.2.4/dist/alibabacloud-iot-device-sdk.min.js  
//  const device = iot.device({productKey: 'a12OcQ4****',deviceName: 'device1',deviceSecret: '3yWqKtWxN7VPuWEEDEn4eKWN********'// 支付宝小程序和微信小程序额外需要配置协议参数// "protocol": 'alis://', "protocol": 'wxs://',
});
device.on('connect', () => {console.log('connect successfully!');// 发送消息到指定的Topic,等待规则引擎转发到另外的一个设备的Topicdevice.publish('/a12OcQ4****/device1/user/RouteData', '{"ke1":"value1 test"}');device.publish('/a12OcQ4****/device1/user/RouteData', 'This is my test job.');
});

device2

// node引入包名
const iot = require('alibabacloud-iot-device-sdk');
// 浏览器、微信小程序,支付宝小程序引入./dist编译的js文件
// const iot = require('./dist/alibabacloud-iot-device-sdk.js');
// js版本下载地址:
//    https://github.com/aliyun/alibabacloud-iot-device-sdk/tree/master/dist  或
//    alibabacloud-iot-device-sdk.js 下载地址 https://unpkg.com/alibabacloud-iot-device-sdk@1.2.4/dist/alibabacloud-iot-device-sdk.js  或
//    alibabacloud-iot-device-sdk.min.js 下载地址 https://unpkg.com/alibabacloud-iot-device-sdk@1.2.4/dist/alibabacloud-iot-device-sdk.min.js  
//  const device = iot.device({productKey: 'a12OcQ4****',deviceName: 'device2',deviceSecret: 'X9fzX9u0aIOORNghPyfYKq22********'// 支付宝小程序和微信小程序额外需要配置协议参数// "protocol": 'alis://', "protocol": 'wxs://',
});
// 定于规则引擎转发过来的消息
device.subscribe('/a12OcQ4****/device2/user/RouteData');
device.on('connect', () => {console.log('connect successfully!');
});
device.on('message', (topic, payload) => {console.log(topic, payload.toString());
});

8、测试运行


原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/517760.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自定义异常和经验小结

自定义异常和经验小结 使用java内置的异常类可以描述在编程时出现的大部分异常情况。除此之外&#xff0c;用户还可以自定义异常。用户自定义异常类&#xff0c;只需继承Exception类即可。在程序使用自定义异常类&#xff0c;大体可分为以下几个步骤&#xff1a; 创建自定义异…

8 种架构设计模式优缺点大曝光 | 原力计划

作者 | 程序员Tony责编 | 王晓曼出品 | CSDN博客什么是架构我想这个问题&#xff0c;十个人回答得有十一个答案&#xff0c;因为另外的那一个是大家妥协的结果&#xff0c;哈哈&#xff0c;我理解&#xff0c;架构就是骨架。人类的身体的支撑是主要由骨架来承担的&#xff0c;然…

企业实战_06_MyCat 常用的分片算法

接上一篇&#xff1a;企业实战_05_MyCat用户密码加密 https://gblfy.blog.csdn.net/article/details/100056536 下一篇&#xff1a;企业实战_07_MyCat 搭建Mysql 一主一从复制环境 https://gblfy.blog.csdn.net/article/details/118640210

数据库OceanBase创始人阳振坤:通关TPC-C到底有多难?

自从蚂蚁金服自研数据库OceanBase获得TPC-C测试第一名后&#xff0c;引起了行业内外大量关注&#xff0c;我们衷心的感谢大家对OceanBase的支持与厚爱&#xff0c;也虚心听取外界的意见和建议。为了让大家更好的了解测试的技术细节&#xff0c;我们特意邀请了OceanBase的核心研…

蚂蚁金服自研数据库OceanBase如何登顶TPC-C

10 月 2 日&#xff0c;国际事务处理性能委员会&#xff08;TPC&#xff09;宣布&#xff1a;在最新发布的 TPC-C 排行榜中&#xff0c;蚂蚁金服自研数据库 OceanBase 位列第一。InfoQ 记者第一时间采访到蚂蚁金服研究员、OceanBase 主架构师杨传辉&#xff08;日照&#xff09…

IntelliJ IDEA在行尾增加分号

CtrlShiftEnter 1.补全分号 2.补全大括号&#xff1a;鼠标定位到if语句 &#xff0c;CtrlShiftEnter

为啥程序员下班后只关显示器从不关电脑?

你下班时是不是只将显示器一关&#xff0c;揣上手机就走了&#xff1f;曾有安保人员晚上来办公室巡查时问&#xff0c;为什么这些人不关机就下班呢&#xff1f;因为等一切工具准备就绪后&#xff0c;半个小时已经过去了。你知道程序员的时薪有多贵吗&#xff1f;效率多高吗&…

从 SOA 到微服务,企业分布式应用架构在云原生时代如何重塑?

阿里妹导读&#xff1a;从十余年前的各种分布式系统研发到现在的容器云&#xff0c;从支撑原有业务到孵化各个新业务&#xff0c;企业的发展离不开统一的、与时俱进的技术架构。本篇文章从企业分布式应用架构层面介绍了云原生计算架构带来的变化&#xff0c;希望能够帮助更多企…

项目-零钱通

项目-零钱通 package com.hspedu.smallchange;import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner;public class SmallCanapeSays {//化繁为简//1.先完成显示菜单&#xff0c;并且可以选择菜单&#xff0c;给出对应提示//2.完成零钱通明细/…

那些年,我们见过的 Java 服务端“问题”

导读 明代著名的心学集大成者王阳明先生在《传习录》中有云&#xff1a; 道无精粗&#xff0c;人之所见有精粗。如这一间房&#xff0c;人初进来&#xff0c;只见一个大规模如此。处久&#xff0c;便柱壁之类&#xff0c;一一看得明白。再久&#xff0c;如柱上有些文藻&#x…

中兴通讯uSmart云电脑,开启安全办公新时代

2020年春天&#xff0c;以5G、人工智能、云计算为代表的“新基建”蔚然成风&#xff0c;着眼国家数字经济体系建设&#xff0c;打造数字经济体系底座的“新基建”&#xff0c;无疑成为中国经济整体应对未来发展的核心方案。可以说&#xff0c;没有任何一个时期比现在更能够彰显…

阿里张磊:云计算生态价值点正迅速聚焦到“应用”上

导读&#xff1a;云原生不再只是基础设施的开发和运维人员的关注点&#xff0c;在应用交付领域小组成立之后&#xff0c;CNCF 基金会正在同应用开发和应用运维人员更紧密的联系在一起。 云原生的理念如今正如火如荼。它不仅仅是一种技术&#xff0c;更是社区基于对云的思考&…

SpringBoot 整合 Spring Cloud Alibaba Nacos 连通性+负载均衡

文章目录一、整合版本说明1. 毕业版本依赖关系(推荐使用)2. 组件版本关系3. 演示版本二、整合实战2.1. 聚合模块设计2.2. 创建聚合parent2.3. 依次创建子项目三、子模块配置3.1. 订单模块3.2. 产品模块3.3. 用户模块3.4. 扣库存模块3.5. 购物车模块四、测试案例4.1. 订单模块4.…

蚂蚁金服OceanBase挑战TPCC|TPC-C基准测试之数据库事务引擎挑战

蚂蚁金服自研数据库 OceanBase 登顶 TPC-C 引起业内广泛关注&#xff0c;为了更清楚的展示其中的技术细节&#xff0c;我们特意邀请 OceanBase 核心研发人员对本次测试进行技术解读&#xff0c;共包括五篇&#xff1a; 1&#xff09;TPC-C基准测试介绍 2&#xff09;OceanBase…

零钱通OOP编程

零钱通OOP编程 package com.hspedu.smallchange.oop;import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner;/****该是完成零钱通的各个功能类* 使用OOP&#xff08;面向对象编程&#xff09;* 将各个功能对应一个方法*/public class SmallCha…

使用dubbo后尽量不用要@Service可能引起冲突

如下有几个包都含有Service dubbo最新版本2.7.8&#xff0c;已经把Service换成DubboService 示例实现类 package com.dubboprovider.service;import org.apache.dubbo.config.annotation.DubboService; import org.springframework.stereotype.Component;//zookeeper 服务注…

面试中遇到这 3 个SQL问题,最容易掉坑里!

作者 | Nathan R译者 | 天道酬勤&#xff0c;责编 | Carol封图 | CSDN下载自视觉中国在本文中&#xff0c;作者将介绍来自3个在技术面试中的真实的SQL问题&#xff0c;这些问题都是在实际公司进行技术筛选时提出的。最常见的读者问题&#xff1a;我应该如何准备SQL面试&#xf…

云原生数据库POLARDB专场“硬核”解析

POLARDB是阿里巴巴自主研发的云原生关系型数据库&#xff0c;目前兼容三种数据库引擎&#xff1a;MySQL、PostgreSQL、Oracle。POLARDB的计算能力最高可扩展至1000核以上&#xff0c;存储容量可达100TB。 POLARDB融合了商业数据库稳定、可靠、高性能的特征&#xff0c;同时具有…

K8s 从懵圈到熟练 – 集群网络详解

导读&#xff1a;阿里云 K8S 集群网络目前有两种方案&#xff1a;一种是 flannel 方案&#xff1b;另外一种是基于 calico 和弹性网卡 eni 的 terway 方案。Terway 和 flannel 类似&#xff0c;不同的地方在于 terway 支持 Pod 弹性网卡&#xff0c;以及 NetworkPolicy 功能。本…

java12/6作业1

作业1 package com.hspjava.Day01;public class Homework01 {//定义Person类{name,age,job},初始化Person对象数组&#xff0c;有3个person对象&#xff0c;并按照age从大到小进行排序public static void main(String[] args) {//初始化Person 对象数组&#xff0c;有3个perso…