java连接阿里云物联网(服务器端)
java连接阿里云物联网(服务器端)
创建服务端订阅(如果没有创建的话,服务器接收不到信息)
这个是默认的消费组,也可以自新定义一个然后修改后面的CONSUMER_GROUP_ID字段为新定义的
导包(这里是所有的)
<dependency><groupId>com.aliyun.alink.linksdk</groupId><artifactId>iot-linkkit-java</artifactId><version>1.2.0.1</version><scope>compile</scope></dependency><dependency><groupId>com.aliyun.alink.linksdk</groupId><artifactId>public-cmp-java</artifactId><version>1.3.5</version><scope>compile</scope></dependency><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.5.1</version></dependency><dependency><groupId>com.aliyun.openservices</groupId><artifactId>iot-client-message</artifactId><version>1.1.5</version></dependency><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-iot</artifactId><version>7.7.0</version></dependency><!-- amqp 1.0 qpid client --><dependency><groupId>org.apache.qpid</groupId><artifactId>qpid-jms-client</artifactId><version>0.47.0</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.62</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>
配置信息类
参考配置信息
public interface DeviceInfoData {//这些信息要去阿里云平台获取String REGION_ID = "cn-shanghai";String ACCESS_KEY = "";String ACCESS_SECRET = "";//三元组信息String DEVICE_NAME = "";String PRODUCT_KEY = "";String DEVICE_SECRET = "";//iotInstanceId:购买的实例请填写实例ID,公共实例请填空字符串""。String IOT_ID="";//您的阿里云账号ID。用主账号登录阿里云控制台,单击账号头像,跳转至账号管理控制台,即可获取账号UID。String UID = "";//控制台服务端订阅中消费组状态页客户端ID一栏将显示clientId参数。//建议使用机器UUID、MAC地址、IP等唯一标识等作为clientId。便于您区分识别不同的客户端。String CLIENT_ID = "";//消费组IDString CONSUMER_GROUP_ID = "DEFAULT_GROUP";}
ACCESS_KEY,ACCESS_SECRET的获取
物联网设备信息接受并进行相应的业务
@Slf4j
@Component
public class ServerIOT {/*** 业务处理异步线程池,线程池参数可以根据您的业务特点调整;或者您也可以用其他异步方式处理接收到的消息*/private final static ExecutorService executorService = new ThreadPoolExecutor(Runtime.getRuntime().availableProcessors(), Runtime.getRuntime().availableProcessors() * 2, 60, TimeUnit.SECONDS, new LinkedBlockingQueue<>(50000));static final String consumerGroupId = DeviceInfoData.CONSUMER_GROUP_ID;//签名方法:支持hmacmd5,hmacsha1和hmacsha256static final String signMethod = "hmacsha1";//控制台服务端订阅中消费组状态页客户端ID一栏将显示clientId参数。//建议使用机器UUID、MAC地址、IP等唯一标识等作为clientId。便于您区分识别不同的客户端。static final String clientId = DeviceInfoData.CLIENT_ID;static final String uid = DeviceInfoData.UID;public void ServerIOTControl() throws Exception {long timeStamp = System.currentTimeMillis();//UserName组装方法,请参见文档:AMQP客户端接入说明。String userName = clientId + "|authMode=aksign"+ ",signMethod=" + signMethod+ ",timestamp=" + timeStamp+ ",authId=" + DeviceInfoData.ACCESS_KEY+ ",consumerGroupId=" + consumerGroupId+ "|";//password组装方法,请参见文档:AMQP客户端接入说明。String signContent = "authId=" + DeviceInfoData.ACCESS_KEY + "×tamp=" + timeStamp;String password = doSign(signContent);//按照qpid-jms的规范,组装连接URL。String connectionUrl = "failover:(amqps://" + uid + ".iot-amqp.cn-shanghai.aliyuncs.com:5671?amqp.idleTimeout=80000)"+ "?failover.reconnectDelay=30";Hashtable<String, String> hashtable = new Hashtable<>();hashtable.put("connectionfactory.SBCF", connectionUrl);hashtable.put("queue.QUEUE", "default");hashtable.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.qpid.jms.jndi.JmsInitialContextFactory");Context context = new InitialContext(hashtable);ConnectionFactory cf = (ConnectionFactory) context.lookup("SBCF");Destination queue = (Destination) context.lookup("QUEUE");// Create ConnectionConnection connection = cf.createConnection(userName, password);((JmsConnection) connection).addConnectionListener(myJmsConnectionListener);// Create Session// Session.CLIENT_ACKNOWLEDGE: 收到消息后,需要手动调用message.acknowledge()// Session.AUTO_ACKNOWLEDGE: SDK自动ACK(推荐)Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);connection.start();// Create Receiver LinkMessageConsumer consumer = session.createConsumer(queue);consumer.setMessageListener(messageListener);}/*** IOT消息监听*/private final MessageListener messageListener = message -> {try {//1.收到消息之后一定要ACK// 推荐做法:创建Session选择Session.AUTO_ACKNOWLEDGE,这里会自动ACK。// 其他做法:创建Session选择Session.CLIENT_ACKNOWLEDGE,这里一定要调message.acknowledge()来ACK。// message.acknowledge();//2.建议异步处理收到的消息,确保onMessage函数里没有耗时逻辑。// 如果业务处理耗时过程过长阻塞住线程,可能会影响SDK收到消息后的正常回调。executorService.submit(() -> processMessage(message));//如果创建Session选择的是Session.CLIENT_ACKNOWLEDGE,这里需要手动ACK。//message.acknowledge();//如果要对收到的消息做耗时的处理,请异步处理,确保这里不要有耗时逻辑。} catch (Exception e) {e.printStackTrace();}};//信息接受,并处理相应的业务private void processMessage(Message message) {try {byte[] body = message.getBody(byte[].class);//content就是阿里云平台发来的json信息,根据这个就可以进行相应的业务处理String content = new String(body);log.info("content=========>" + content);} catch (JMSException e) {log.error("processMessage occurs error ", e);}}/*** IOT连接监听*/private final JmsConnectionListener myJmsConnectionListener = new JmsConnectionListener() {/*** 连接成功建立。*/@Overridepublic void onConnectionEstablished(URI remoteURI) {log.info("onConnectionEstablished, remoteUri:{}", remoteURI);}/*** 尝试过最大重试次数之后,最终连接失败。*/@Overridepublic void onConnectionFailure(Throwable error) {log.error("onConnectionFailure, {}", error.getMessage());}/*** 连接中断。*/@Overridepublic void onConnectionInterrupted(URI remoteURI) {log.info("onConnectionInterrupted, remoteUri:{}", remoteURI);}/*** 连接中断后又自动重连上。*/@Overridepublic void onConnectionRestored(URI remoteURI) {log.info("onConnectionRestored, remoteUri:{}", remoteURI);}@Overridepublic void onInboundMessage(JmsInboundMessageDispatch envelope) {}@Overridepublic void onSessionClosed(Session session, Throwable cause) {}@Overridepublic void onConsumerClosed(MessageConsumer consumer, Throwable cause) {}@Overridepublic void onProducerClosed(MessageProducer producer, Throwable cause) {}};/*** password签名计算方法,请参见文档:AMQP客户端接入说明。*/private String doSign(String toSignString) throws Exception {SecretKeySpec signingKey = new SecretKeySpec(DeviceInfoData.ACCESS_SECRET.getBytes(), ServerIOT.signMethod);Mac mac = Mac.getInstance(ServerIOT.signMethod);mac.init(signingKey);byte[] rawHmac = mac.doFinal(toSignString.getBytes());return Base64.encodeBase64String(rawHmac);}}
参考阿里云文档
java连接阿里云物联网(服务器端)相关推荐
- Paho Java Client 连接阿里云物联网平台
Paho Java Client 连接阿里云物联网平台 进入阿里云物联网平台->点击产品->新建 点击设备->添加设备 查看设备证书,复制记录,后面使用 阿里云TCP通信 一机一密. ...
- 【阿里云生活物联网架构师专题 ④】分享可商用的ESP8266 SDK连接阿里云物联网生活平台的在线远程升级OTA笔记。
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1.esp32接入阿里云物联网平台,实现天猫精灵语音控制: 2.es ...
- 使用arduino D1 wifi模块(WeMos D1)连接阿里云物联网平台并成功实现APP点亮板载LED(五)---MQTT.fx模拟设备连接阿里云
前文提到,物联网设备在阿里云物联网平台登记了"身份证"之后,阿里云物联网平台上的设备就处于"未激活""离线"或者"在线" ...
- ESP8266开发、ESP8266连接阿里云物联网、天猫精灵控制esp8266、esp8266一键配网、智能家居
ESP8266开发.ESP8266连接阿里云物联网.天猫精灵控制esp8266.esp8266一键配网.智能家居 项目介绍 最近会 将arduino IDE开发ESP8266中一些值得记录得部分写下来 ...
- MQTT学习笔记(1)--网络调试助手连接阿里云物联网
初探 MQTT的网络调试助手通信测试 上手之前觉得很有难度,但是当你慢慢上手,你回过头来,你会发现哦,原来是这样的啊! 这里用的平台是阿里云的物理网平台所以有必要要介绍一下如何使用平台,如何申请,和白 ...
- 利用PYTHON连接阿里云物联网平台
语言:python 3.7 环境:windows 10 实例:公共实例(免费) 阿里云的官方文档只有C语言和Linux环境,因此自我探索出利用PYTHON连接阿里云物联网平台的方法和步骤. 概述 - ...
- 使用arduino D1 wifi模块(WeMos D1)连接阿里云物联网平台并成功实现APP点亮板载LED(九)---制作APP
前几篇文章讲解了如何在阿里云控制台上给设备登记"身份证",如何用MQTT.fx客户端模拟一个设备连接阿里云物联网平台,分析了arduino编程环境如何配置依赖库,在arduino ...
- 手把手教你用Arduino接入阿里云物联网平台,ESP8266连接阿里云物联网平台必看教程...
使用Ardui no 的方式快速连接阿里云物联网平台. 文中提到的 AliyunIoTSDK 这个 Arduino 库,可以在 Arduino 库商店里搜索到(搜索 AliyunIoTSDK) Ali ...
- ESP-MQTT-AT指令连接阿里云物联网平台
文章目录 文章背景 关键的关键词 本章使用 本章约定 所需资源 技术正文 一:连接方式 二:步骤(简介 3.ESP模块+stm32单片机) 1.创建设备复制三元素组 2.信息生成 3.使用串口工具和云 ...
最新文章
- PHP--isset()和unset()函数的用法
- java遍历查询的某一列_【jQuery:遍历相同class的所有值,遍历某一列td的值】
- 弹窗页面PHP代码不执行,PHP代码没有被执行,而是代码显示在页面上
- android 3.0+百度地图api地图如何移动到指定的经纬度处
- VS2008 Tips #004 – 您可以通过“浏览方式…”添加浏览器到 Visual Web Developer
- 为什么C++(感谢waterwalk翻译)
- 2018年第九届蓝桥杯C/C++ A组国赛 —— 第二题:阅兵方阵
- 解决内存不能为read或者0x0***的错误
- C/C++信息隐写术(一)之认识文件结构
- 【转】架构师Jack专访:全面认识软件测试架构师
- [转][Android]Android数据的四种存储方式
- win8.1 安装kb2999226 一直提示 搜索更新
- 典型芯片封装及其特征间距
- 微信购物商城系统怎样吸引住客户,来转换为商城系统的粉丝?
- 【ELMAN回归预测】基于matlab鲸鱼算法优化ELMAN回归预测【含Matlab源码 1667期】
- freecodecamp小练习——Falsy Bouncer过滤数组假值
- 电脑端哔哩哔哩视频下载
- 总有一项适合你:联想 Miix2 8寸版触摸屏失灵的各项解决方案
- selenium模拟登录某宝
- 【开发日志】2022.09.25 Unity变色龙跑酷自制游戏详解
热门文章
- android平板评测,最火7吋Android平板 三星P1010全面评测
- 【渝粤题库】陕西师范大学200611 英语修辞 作业
- (入门、全面、通用)树莓派Raspbian系统安装配置,篇一
- 怎样看笔记本上有无无线网卡?
- 政务微信门户建设思考
- 未来计算机手抄报图片,小学生科技创造未来手抄报图片简单又漂亮
- 四种Linux硬盘分区方式,首次安装Linux之磁盘分区
- yys opencv自动图片识别 学习交流
- python输入一个三位数、输出它的逆序数_从键盘任意输入一个3位整数
- ESP32基于arduino开发的心跳体温检测系统(二)传感器的使用