消息通讯之关于消息队列MQ必须了解的相关概念

系统通讯方式有哪些?

RPC调用

RPC 全称 Remote Procedure Call——远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的方式。

RPC 调用分类
通讯协议层面   基于 HTTP 协议的 RPC;基于二进制协议的 RPC;基于 TCP 协议的 RPC  
是否跨平台   单语言 RPC,如 RMI, Remoting;跨平台 RPC,如 google protobuffer, restful json,http XML。  
调用过程   同步通信RPC和异步通信RPC  

消息队列

“消息队列”是在消息的传输过程中保存消息的容器。

消息队列的应用场景

异步处理

有些业务不想也不需要立即处理消息。消息队列提供了异步处理机制,允许用户把一个消息放入队列,在需要的时候进行处理;例如用户注册的时候发送验证邮件可以通过异步处理的方式在另外一个线程内完成发送邮件操作.

解耦

在应用开发过程中随着需求的增加各个模块进行过度耦合,各模块之间形成相互调用的关系,我们可以利用消息队列形成中间层进行解耦.

流量削峰

在应用某一时段会发生大流量的请求,例如双十一会造成大量请求数据库,数据库很快就会形成瓶颈.我们可将数据请求持久化在消息队列中,进行逐步处理.

日志收集

在项目开发和运维的心中日志是一个很重要的部分,如果尽可能全面而又有效的收集日志进行分析是一个势在必得的任务,我们可以使用消息队列来构建统一日志处理平台.

事务最终一致

在行业中使用消息队列来保证一个事务的最终一致性也是常见分布式事务的解决方案.

消息队列通讯模型

一个最基本的消息队列应该具有消息发送者,消息处理中心,消息消费者三个功能.

消息通讯之关于消息队列MQ必须了解的相关概念

在MQ中消息队列主要有两种通讯模型分别是PTP点对点和Pub/Sub发布订阅

img

img

常见的消息协议

消息协议是指用于实现消息队列功能时双方通信的一个约定, 例如 如何区分客户端是生产消息还是消费消息? 客户端向消息处理中心发送"发送: I am a Javaer"字符串,那么我们根据xxx约定字符中包含发送的代表生产消息,那么我们就可以知道该客户端要发送消息内容是" I am a Javaer",常见的消息协议有AMQP,MQTT,STOMP,XMPP等

AMQP

AMQP即Advanced Message Queuing Protocol,高级消息队列协议,是面向消息中间件设计的应用层协议的一个开放标准。 它的主要特点是面向消息、队列、路由(包括点对点和发布/订阅)]、可靠性和安全。

AMQP允许来自不同供应商的消息生产者和消费者实现真正的互操作扩展,就如同SMTP、HTTP、FTP等协议采用的方式一样。而此前对于消息中间件的标准化努力则集中在API层面上(比如JMS),且没有提供互操作性的途径。不同于JMS的仅仅定义API,AMQP是一个线路级的协议——它描述了通过网络传输的字节流的数据格式。因此,遵从这个协议的任何语言编写的工具均可以操作AMQP消息。

AMQP模型图

AMQP

Exchange即交换器,用来接收Producer发布的消息,并通过设定的路由规则将消息路由给服务器中的Queue。

Binding即绑定器,可以理解为路由规则。它的作用就是把Exchange和Queue按照路由规则绑定起来。

Binding Key即绑定关键字,Exchange视自身类型来决定Binding的路由行为。

Routing Key即消息的路由关键字,Exchange根据这个关键字决定如何路由某条消息。

MQTT

MQTT 最初由 IBM 于上世纪 90 年代晚期发明和开发。它最初的用途是将石油管道上的传感器与卫星相链接。顾名思义,它是一种支持在各方之间异步通信的消息协议。异步消息协议在空间和时间上将消息发送者与接收者分离,因此可以在不可靠的网络环境中进行扩展。虽然叫做消息队列遥测传输,但它与消息队列毫无关系,而是使用了一个发布和订阅的模型。在 2014 年末,它正式成为了一种 OASIS 开放标准,而且在一些流行的编程语言中受到支持(通过使用多种开源实现)。

MQTT模型图

使用 MQTT ä"£ç†ã€æ•°æ®å­˜å‚¨å’Œç®¡ç†æŽ§åˆ¶å°å‘å¸ƒå’Œè®¢é˜…ä¼ 感器数据消息的流程图

ATOMP

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpdgjz.html