博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RabbitMQ(1)---概述
阅读量:4087 次
发布时间:2019-05-25

本文共 1321 字,大约阅读时间需要 4 分钟。

1、什么是消息中间件?

Message Queue,简称之为MQ,即消息队列。

消息队列是应用程序和应用程序之间的通信方法。

2、为什么要使用消息队列?

在项目中,有一些非常耗时但无需即时返回的操作,可以将这些操作提取出来,进行异步处理。

这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量。

3、消息队列的应用场景?

场景1:异步处理

将不需要同步处理的,并且耗时长的操作由消息队里通知消息接收方进行异步处理,提高了应用程序的响应时间。

场景2:应用解耦

MQ相当于一个中介,生产者通过MQ与消费者交互,它将应用程序进行解耦合。

场景3:流量削峰

如:订单系统,在下单的时候就会往数据库写数据,但是数据库只能支撑每秒1000左右的并发写入。低峰期也就每秒100多个并发写入,而高峰期并发量会突然激增到5000个,这个时候数据库肯定卡死。

如果消息被MQ保存起来,然后系统就可以按照自己的消费能力来消费,比如每秒1000个并发写入,这样慢慢写入数据库,这样就不会卡死数据库。

但是使用MQ之后,限制了消费消息的速度为1000,这样高峰期产生的数据势必会被积压在MQ中,高峰期的流量就被削掉了。但是因为消息积压,在高峰期过后的一段时间内,消息消息的速度还是会维持在1000QPS,直到消费完积压的消息,这就叫做“填谷”。

 

4、实现MQ的两种主流方式

方式1:基于AMQP实现MQ

AMQP是一种协议,更准确的说是一种binary wire-level protocol(链接协议)。AMQP不从API层进行限定,而是直接定义网络交互的数据格式。

方式2:基于JMS实现MQ

JMS(java message service),即java消息服务应用程序接口,是一个java平台中关于面向消息中间件(MOM)的API。用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。

两者的区别在于:

AMQP JMS
只是协议,不规定实现方式,因此是跨语言的 限定了必须使用java
消息模式非常丰富 规定了两种消息模式
通过规定协议来统一数据交互的格式 定义了统一的接口,来对消息进行的操作进行统一

5、常见的MQ,如下:

1)、ActiveMQ:基于JMS

2)、zeroMQ:基于C语言开发

3)、RibbitMQ:基于AMQP协议的,erlang语言开发,稳定性好

4)、RocketMQ:基于JMS,阿里巴巴的产品

5)、kafka:类似MQ的产品,分布式消息系统,高吞吐量。

 

6、什么是RibbitMQ?

官网地址:

RibbitMQ是erlang语言开发的,基于AMQP(advanced message Queue Protocol,高级消息队列协议)协议实现的消息队列。

它是一种应用程序之间的通信方法,消息队列在分布式系统开发中应用非常广泛。

 

7、RibbitMQ提供的6种模式

模式1:Simple简单模式

模式2:Work工作模式

模式3:Publish/Subscribe发布与订阅模式

模式4:Routing路由模式

模式5:Topics主题模式

模式6:RPC调用模式(远程调用,不太算MQ)

转载地址:http://cmuii.baihongyu.com/

你可能感兴趣的文章
VUE面试题总结
查看>>
写好JavaScript条件语句的5条守则
查看>>
原生JS中DOM节点相关API合集
查看>>
【TINY4412】U-BOOT移植笔记:(7)SDRAM驱动
查看>>
【TINY4412】U-BOOT移植笔记:(12)BEEP驱动
查看>>
单链表的修改和删除
查看>>
C++的三个基本特征:封装、继承、多态
查看>>
C++虚函数的总结
查看>>
什么是URL地址?
查看>>
C++多态的实现方式总结
查看>>
学习C++需要注意的问题
查看>>
C++模板
查看>>
C++双冒号(::)的用法
查看>>
【Unity】封装SQLite管理类
查看>>
【Unity】面试题整理
查看>>
【C#】如何实现一个迭代器
查看>>
【Unity】Destroy和DestroyImmediate的区别
查看>>
【Lua】Mac系统下配置SublimeText的Lua编译环境
查看>>
【C#】利用Conditional属性完成编译忽略
查看>>
【Unity】微信登录后将头像存为bytes,将bytes读取成sprite图片
查看>>