当前位置: 首页 > 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 发布
  • 自己简单写的 事件订阅机制
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • co.js - 让异步代码同步化
  • ES6简单总结(搭配简单的讲解和小案例)
  • gitlab-ci配置详解(一)
  • HTML5新特性总结
  • HTTP那些事
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • Python实现BT种子转化为磁力链接【实战】
  • 阿里云前端周刊 - 第 26 期
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 聊一聊前端的监控
  • 微服务框架lagom
  • 新手搭建网站的主要流程
  • ​ubuntu下安装kvm虚拟机
  • # Maven错误Error executing Maven
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (译)2019年前端性能优化清单 — 下篇
  • (转)菜鸟学数据库(三)——存储过程
  • (转)德国人的记事本
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • [ vulhub漏洞复现篇 ] ThinkPHP 5.0.23-Rce
  • [ 第一章] JavaScript 简史
  • [element-ui] el-dialog 中的内容没有预先加载,因此无法获得内部元素的ref 的解决方案
  • [ExtJS5学习笔记]第三十节 sencha extjs 5表格gridpanel分组汇总
  • [IE6 only]关于Flash/Flex,返回数据产生流错误Error #2032的解决方式
  • [JavaWeb]——过滤器filter与拦截器Interceptor的使用、执行过程、区别
  • [leetcode]_Symmetric Tree
  • [leveldb] 2.open操作介绍
  • [POJ 2406]Power Strings[KMP]
  • [Spring Data MongoDB]学习笔记--MongoTemplate插入修改操作
  • [SQL]数据库语言学习