阿里云物联网平台AMQP服务端订阅NetSDK Demo
Step By Step
1、相关参数获取:
2、SDK:AMQPNetLite 安装:
3、Code Sample
using System; using System.Text; using Amqp; using Amqp.Sasl; using Amqp.Framing; using System.Threading; using System.Security.Cryptography.X509Certificates; using System.Net.Security; using System.Security.Cryptography; namespace IOTAmqpDemo { class Program { //接入域名,请参见AMQP客户端接入说明文档。 // 注意不用带 amqp:// static string Host = "18482178********.iot-amqp.cn-shanghai.aliyuncs.com"; static int Port = 5671; static string AccessKey = "LTAIOZZg********"; static string AccessSecret = "v7CjUJCMk7j9aK****************"; static string consumerGroupId = "R45CIUGUE3****************"; static string clientId = "demoClientID"; //iotInstanceId:购买的实例请填写实例ID,公共实例请填空字符串""。 static string iotInstanceId = ""; static int Count = 0; static int IntervalTime = 10000; static Address address; static void Main(string[] args) { long timestamp = GetCurrentMilliseconds(); string param = "authId=" + AccessKey + "×tamp=" + timestamp; //userName组装方法,请参见AMQP客户端接入说明文档。 string userName = clientId + "|authMode=aksign,signMethod=hmacmd5,consumerGroupId=" + consumerGroupId + ",iotInstanceId=" + iotInstanceId + ",authId=" + AccessKey + ",timestamp=" + timestamp + "|"; //计算签名,password组装方法,请参见AMQP客户端接入说明文档。 string password = doSign(param, AccessSecret, "HmacMD5"); DoConnectAmqp(userName, password); ManualResetEvent resetEvent = new ManualResetEvent(false); resetEvent.WaitOne(); } static void DoConnectAmqp(string userName, string password) { address = new Address(Host, Port, userName, password); //Create Connection ConnectionFactory cf = new ConnectionFactory(); //use local tls if neccessary //cf.SSL.ClientCertificates.Add(GetCert()); //cf.SSL.RemoteCertificateValidationCallback = ValidateServerCertificate; cf.SASL.Profile = SaslProfile.External; cf.AMQP.IdleTimeout = 120000; //cf.AMQP. //cf.AMQP.ContainerId、cf.AMQP.HostName请自定义。 cf.AMQP.ContainerId = "client.1.2"; cf.AMQP.HostName = "contoso.com"; cf.AMQP.MaxFrameSize = 8 * 1024; var connection = cf.CreateAsync(address).Result; //Connection Exception Closed connection.AddClosedCallback(ConnClosed); //Receive Message DoReceive(connection); } static void DoReceive(Connection connection) { //Create Session var session = new Session(connection); //Create Link and Receive Message var receiver = new ReceiverLink(session, "queueName", null); receiver.Start(20, (link, message) => { object messageId = message.ApplicationProperties["messageId"]; object topic = message.ApplicationProperties["topic"]; string body = Encoding.UTF8.GetString((Byte[])message.Body); //注意:此处不要有耗时的逻辑,如果这里要进行业务处理,请另开线程,否则会堵塞消费。如果消费一直延时,会增加消息重发的概率。 Console.WriteLine("receive message, topic=" + topic + ", messageId=" + messageId + ", body=" + body); //Acknowledge Message link.Accept(message); }); } //连接发生异常后,进入重连模式。 //这里只是一个简单重试的示例,您可以采用指数退避方式,来完善异常场景,重连策略。 static void ConnClosed(IAmqpObject _, Error e) { Console.WriteLine("ocurr error: " + e); if (Count < 3) { Count += 1; Thread.Sleep(IntervalTime * Count); } else { Thread.Sleep(120000); } //Reconnection DoConnectAmqp(address.User, address.Password); } static X509Certificate GetCert() { string certPath = Environment.CurrentDirectory + "/root.crt"; X509Certificate crt = new X509Certificate(certPath); return crt; } static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; } static long GetCurrentMilliseconds() { DateTime dt1970 = new DateTime(1970, 1, 1); DateTime current = DateTime.Now; return (long)(current - dt1970).TotalMilliseconds; } //签名方法:支持hmacmd5,hmacsha1和hmacsha256。 static string doSign(string param, string accessSecret, string signMethod) { //signMethod = HmacMD5 byte[] key = Encoding.UTF8.GetBytes(accessSecret); byte[] signContent = Encoding.UTF8.GetBytes(param); var hmac = new HMACMD5(key); byte[] hashBytes = hmac.ComputeHash(signContent); return Convert.ToBase64String(hashBytes); } } }
4、测试效果
- 4.1 设备上报消息
- 4.2 服务端订阅
更多参考

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
阿里云物联网平台AMQP服务端订阅NodeJS Demo
Step By Step 配置服务端订阅 1、创建消费组 2、创建订阅 参数获取 3、ConsumerGroupId获取位置 4、AccessKeyId、AccessKeySecret及Uid获取 参考地址:阿里云常见参数获取位置 5、iotInstanceId 独享实例需要指定,公共实例配置为空即可。 6、ClientId可以任意指定,例如设置为:tarodemo。 7、Host: ${uid}.iot-amqp.${regionId}.aliyuncs.com 例如:184*.iot-amqp.cn-shanghai.aliyuncs.com SDK 安装 npm install rhea Code Sample const container = require('rhea'); const crypto = require('crypto'); //建立连接。 var connection = container.connect({ //接入域名,请参见AMQP客户端接入说明文档。 'host': '18482************.iot-amqp.cn-shanghai....
- 下一篇
【最佳实践】实时计算Flink在IoT行业的实时数仓建设实践
行业背景 行业现状: 物联网(Internet of Things,以下简写为 IoT)是互联网、传统电信网等资讯的承载体,让所有具备独立功能的普通物体实现互联互通的网络。物联网广泛应用于运输和物流、健康医疗、智慧环境(家庭、办公、工厂)等领域, 具有十分广阔的市场和应用前景。物联网将智能感知、识别技术、网络通信与普适计算等技术融合起来,被认为是继计算机、互联网、智能手机之后世界信息产业发展的下一个风口。 据 IDC 估计,到 2020 年物联网将在全球范围内产生 1.46 万亿美元的价值。据预测,届时中国的物联网市场规模将超过 1.8 万亿人民币。得益于庞大的人口基数和低廉的芯片制造成本,中国将成为物联网行业的主要参与者,并在推动全球物联网市场增长上发挥重要的作用。 大数据在其行业中的作用: 数以百万计的物联网设备连接到物联网,产生了大量的数据,通过大规模分析这些数据了解影响业务的上下文关系和模式,从而做出更加实时决策,因此,可以说大数据和物联网密切相关。 物联网大数据分析可以帮助人们更好地理解数据,从而做出更有效、明智的决定。大数据分析使数据挖掘者和科学家能够利用传统工具分析非结构...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS关闭SELinux安全模块
- CentOS8安装Docker,最新的服务器搭配容器使用
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池