当前位置: 首页 > news >正文

消息队列系列二(IOT中消息队列的应用)

许多消息队列旨在为您的应用程序提供轻量级的发布/订阅消息传输协议。为什么以及何时在您的物联网项目中使用消息队列?

考虑温室中的温度传感器,它测量温度。您的应用程序可以在15分钟的时间间隔内(每天月96次)将温度发送到消息队列。而不是处理温室中的数据并始终连接。

物联网的消息队列旨在提供轻量级的发布/订阅消息传输。您只需发送数据并在另一项服务中处理数据,而不是保留处理温室数据的应用程序。这需要较少的网络带宽,这可能会限制您的传感器,或者您的传感器通过卫星链路进行通信。

消息队列使您的应用程序具有低功耗,发送最小化的数据包,并有效地将信息分发给一个或多个接收器。

物联网项目中的消息队列

消息队列是一种服务到服务通信的方式。它允许应用程序通过相互发送消息进行通信。消息队列的基本体系结构很简单,有些客户端应用程序可以创建消息并将它们传递到消息队列。其他应用程序/服务从队列中检索消息并处理消息中包含的请求和信息

消息可以包含任何类型的信息。例如,它可以获得有关应该从另一个应用程序(可能位于其他位置)开始的进程/任务的消息,或者它可能只是需要处理的数据。

物联网和异步消息

因特网 应用程序被动反应和异步是一个“必须”。大多数IoT应用程序应该能够处理来自设备的许多连接以及从中过去的所有消息

异步消息传递在机器到机器通信中被广泛使用。这以为这发送方不会期望立即相应,并且发送方在等待相应是时不会“阻止”任何内容。

异步通信可以实现灵活性,应用程序可以发送消息,然后继续处理其他事情-在同步通信中,它必须等待实时响应。您可以将消息写入队列,然后让相同的业务员逻辑发生,而不是调用Web服务并等待它完成。

在您的应用程序需要完成某些操作但不需要立即完成,或者甚至不关心结果的情况下,队列可能很棒。

解耦

消息队列可用于实现解耦,并有助于保持结构的灵活性。它使得用不同语言编写的两个不同的应用程序连接在一起非常容易。

消息队列允许每个组件独立地执行其任务-它允许组件保持完全自治并且彼此不知道,一项服务的更改不应要求更改其他服务。它是分离服务的过程因此它们的功能更加独立。

冗余和弹性

应用程序有时会崩溃 - 它会发生。这可能是由于超时或您的代码中只有错误影响整个应用程序。消息队列强制可以使接收应用程序确认它已完成任务,并且可以安全地从队列中删除该任务。如果接收应用程序中的任何内容失败,该消息将保留在队列中。

当目标程序繁忙或未连接时,消息队列提供临时消息存储。

通过打破您的应用程序并按队列分隔不同的组件,您固有地创建了更多的弹性。即使部分后端处理延迟,您的应用程序仍然可以运行。

交通高峰

许多应用程序的流量激增。门铃应用程序,让您可以从任何地方回答您的门,万圣节期间可能会有交通高峰,而购物应用程序可能会在黑色星期五有交通高峰。通过对数据进行排队,您可以确保最终保留和处理您的数据; 即使这意味着由于高流量峰值,它需要比平常更长的时间。

使用RabbitMQ对IoT进行消息队列排队

有一些IoT通信协议和标准旨在简化物联网设计。如果您考虑基于队列的解决方案,CloudAMQP会提供两种最流行的开放式消息传递协议;AMQP和MQTT通过RabbitMQ。

AMQP是一种安全可靠的协议,开销低,非常适合物联网应用,AMQP是一种比MQTT更先进的协议,更可靠,更好的支持安全性。AMQP还具有灵活路由,持久和持久队列,群集,联合和高可用性队列等功能。缺点是它是一个更冗长的协议-取决于您如何实施您的解决方案。

MQTT是为物联网设计的另一种协议。MQTT宣传的物联网优势仅适用于功耗极地的设备。MQTT非常节能 ,它非常注重最小的线路占用空间。由于其简单性,在客户端上实现MQTT所需的工作量比AMQP要少。但是MQTT缺少从服务器到客户端的授权和错误通知,这是一个很大的限制。

RabbitMQ是一个消息队列软件,称为消息代理或队列管理器,简单地说,它是一个可以定义队列的软件,应用程序可以连接到队列并将消息传输到队列上。

相关文章:

  • js排序篇----快速排序,选择排序,冒泡排序,希尔排序
  • Service Worker
  • 《文献管理与信息分析》第五章 学习笔记
  • 一些集群操作以及问题查询
  • GraphQL学习过程应该是这样的
  • Spark -- WordCount程序
  • Java SE 12扩展Switch语句/表达式完整指南
  • java中具有继承关系的类及其对象初始化顺序
  • 和平之翼代码生成器SMEU版 4.0.0 Beta5 宝船公布
  • 去哪里学习行业知识?
  • java概述
  • Kubeadm证书过期问题修复方法之一:通过修改kubeadm源码
  • 区块链分支循环
  • java中【派生类、基类、父类、子类】
  • FydeOS VM for VMWare v6.0 Preview1 发布
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • CEF与代理
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • Cumulo 的 ClojureScript 模块已经成型
  • ES6核心特性
  • Spark学习笔记之相关记录
  • SpringCloud集成分布式事务LCN (一)
  • TypeScript迭代器
  • 大快搜索数据爬虫技术实例安装教学篇
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 诡异!React stopPropagation失灵
  • 让你的分享飞起来——极光推出社会化分享组件
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 详解NodeJs流之一
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​卜东波研究员:高观点下的少儿计算思维
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • ${ }的特别功能
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (C++)八皇后问题
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (定时器/计数器)中断系统(详解与使用)
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (一)WLAN定义和基本架构转
  • (一)插入排序
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (原創) 物件導向與老子思想 (OO)
  • (转)IOS中获取各种文件的目录路径的方法
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • **python多态
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .chm格式文件如何阅读
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .Net Core和.Net Standard直观理解
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .Net的C#语言取月份数值对应的MonthName值
  • .NET开发不可不知、不可不用的辅助类(一)
  • .NET框架