文档章节

一男子激动地安装了RabbitMQ,看完博文后笑容没了

字数 1750
阅读 219
收藏 0

一个事物总是会关联着很多事物。

要了解RabbitMQ,先了解 AMQP,要了解AMQP,先了解MQ。

(1)MQ 

Message Queue 消息队列,简称MQ,用于跨进程之间的上下游非实时通信。此处的上下游是平行关系。
MQ适用场景:上下游之间需要进行低频、非实时通信、上下游之间业务不相互依赖。
MQ不适用场景:高频、实时、上下游相互依赖、耦合。此时用方法调用的方式。(方法调用或远程调用)。
MQ是一种技术的统称。

(2) AMQP

一种应用层协议,专用用于消息通信,算是一个RFC标准(HTTP1.1 定义在RFC2616中)。应用层协议不需要了解太多。只需要了解OSI七层模型中,TCP和UDP 位于传输层,基于TCP/UDP之上的协议后来都是应用层协议。
这些协议的区别在我看来无非就是长连接、短链接,报文协议格式不同而已。既如此,理解HTTP就够了。AMQP、RSTP、MQTT、FTP、WebSocket、SMTP... 这些协议,有需求再去理解。一般也不用去理解,会有对应的框架和技术来屏蔽各种协议,让你面向对象或者面向API开发。

AMQP是一种通信协议。

(3)RabbitMQ

Tomcat,Nginx,Apache 都按照HTTP协议去实现,所以它们的相同点就是都是HTTP服务器。RabbitMQ是一种实现了AMQP协议的软件程序。自然叫做消息服务器。和HTTP服务器类似,通信双方一个叫做客户端,一个叫做服务端。只不过在RabbitMQ是一种专门用于接受消息的服务器。而它们接受消息的目的,是为了暂时保存、以便其它客户端获取,所以RabbitMQ服务端的确是一个消息中转站,负责接受和保存消息。而RabbitMQ客户端,我们以前称之为上下游。现在我们给它一个更具体的名称:生产者 或者消费者。产生消息的客户端就是生产者、拿走消息的客户端就是消费者。

举个例子:
现在有两个系统:一个是开奖系统A、一个是其他业务系统B。开奖系统只负责开奖,但是考虑到别人可能需要知道开奖结果,所以A产生一个消息放到中转站中,业务系统B从中中转站拿走这个消息。 这个场景,就适合用RabbitMQ。A系统就是上游,就是消息生产者。中转站就是RabbitMQ,接受消息的地方。B系统就是下游,就是消费者,从中转站中拿走消息。A不依赖于B,B不依赖于A,两者之间的通信既不用那么实时、高频,也不是相互依赖。RabbitMQ这个中间件起的就是一个解耦的作用。

至此,对RabbitMQ已有大概认识。RabbitMQ 是消息服务器、有消息存储功能,提供了算法实现。其他客户端只需要把消息放在这,或者从这拿走消息就行了。

(4) 如何使用RabbitMQ(没有具体的代码,只是粗略的步骤而已。)
    首先要搭建RabbitMQ服务器。
            去官网下载软件,安装,启动服务。没错就像安装mysql、redis、apache那样。有配置文件吧,也许。但我目前还不知道。因为没具体学习。
    其次生产者系统要在需要发消息的时候产生消息发给RabbitMQ服务器
            发消息,肯定要是客户端干的事情。如果是java语言,去找对应的maven依赖。如果是node.js,去找对应的npm包。
            然后建立连接,发消息就行了。建立连接是需要账号、密码、虚拟机等这些信息的。然后就是用不同的工作模式的调用API发消息。
            RabbitMQ就会收到消息。
    与此同时消费者系统要 开启监听,等待消息从RabbitMQ服务器的到来
             类似同上步骤,选择语言、包,建立连接。然后就是监听消息。
            

(5)  RabbitMQ工作模式

RabbitMQ提供了各种编程语言的客户端支持。对java来说,RabbitMQ客户端就是一个jar。使用java的RabbitMQ客户端开发包可以,
把消费发送给RabbitMQ服务器-------生产者。
还可以通过监听,接受RabbitMQ那里的消息(赌一包辣条,底层是TCP长连接实现的全双工) ------------消费者。

在学习多线程的时候,就已经模拟过生产者和消费者的场景了。要么一个生产者、一个消费者,要么是一个生产者,多个消费者。。。情况比较多,
RabbitMQ也会面临这样的选择,RabbitMQ的工作模式:(从CSDN借用一个图 https://blog.csdn.net/hellozpc/article/details/81436980  )

简单模式:一个生产者,一个消费者
work模式:一个生产者,多个消费者,每个消费者获取到的消息唯一。
订阅模式:一个生产者发送的消息会被多个消费者获取。
路由模式:发送消息到交换机并且要指定路由key ,消费者将队列绑定到交换机时需要指定路由key
topic模式:将路由键和某模式进行匹配,此时队列需要绑定在一个模式上,“#”匹配一个词或多个词,“*”只匹配一个词。
RPC模式:

 

(6) 我的需求

现有 应用系统A、应用系统B、底层硬件系统C。
A依赖于B的数据,但不和C发生直接通信,B和C之间通过4G模块进行频繁、实时通信。数据量有的比较大、有的比较少。
B的确需要一些中间件来缓存一些实时数据(一小段时间内不覆盖,长时间覆盖),在A需要的时候可从B这里拿,实现间接的实时。有可能有人会有疑问,为什么需要B?把B剔除掉,A和C通信不就完事了吗? 的确如此。可是A已经开发好,由甲方开发。B和C由乙方开发。我的最终的方案和目标是:把B开发出来,作为一个子系统给A去调用(A的前后台都可能会调用B)。也就是分布式系统。
综上,RabbitMQ并不能解决我的问题。所以我没有系统学习它。而是花了几个小时的时间大概了解了它,然后写下了这篇博文。

 

 

 

 

 

© 著作权归作者所有

西
粉丝 0
博文 3
码字总数 2363
作品 0
钦州
私信 提问
加载中

评论(0)

RabbitMQ详解(一)------简介与安装

  RabbitMQ 这个消息中间件,其实公司最近的项目中有用到,但是一直没有系统的整理,最近看完了《RabbitMQ实战 高效部署分布式消息队列》这本书,所以顺便写写。   那么关于 RabbitMQ 是...

ysocean
2018/06/28
0
0
RabbitMQ安装与web后台管理界面开启

首先介绍一下RabbitMQ: RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用...

Andrewniu
2019/01/29
0
0
RabbitMQ安装测试学习过程简单的记录

工作快两年了php手册都没有完全的通读过一遍发现自己不知道的东西太多了一定要坚持认真的看完!!! 今天接着看php手册是看到消息队列RabbitMQ比较感兴趣 先练练吧 1:安装 由于RabbitMQ是由...

刘纪君
2013/03/31
55
0
解决RabbitMQ远程不能访问的问题

刚刚安装的RabbitMQ-Server-3.3.5,并且也已经开启了Web管理功能,但是现在存在一个问题: 出于安全的考虑,guest这个默认的用户只能通过http://localhost:15672 来登录,不能使用IP地址登录...

dwf07223
2018/06/28
0
0
RabbitMQ 远程 IP 访问 解决办法 -摘自网络

刚刚安装的RabbitMQ-Server-3.3.5,并且也已经开启了Web管理功能,但是现在存在一个问题: 出于安全的考虑,guest这个默认的用户只能通过http://localhost:15672 来登录,不能使用IP地址登录...

andrewniu
2018/05/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

初学数据结构--堆和优先队列

初学数据结构--堆和优先队列 在之前的那两章详细的向各位介绍了二分搜索树这种数据结构,同时我们使用二分搜索树实现了集合和映射这两个相对来讲更加高层的数据结构。那么树,这种数据结构本...

loubobooo
12分钟前
43
0
Elasticsearch7.3.2下载安装

1. es镜像下载 https://thans.cn/mirror/elasticsearch.html 2. rz上传到/usr/local 3. 解压 tar -zxf elasticsearch-7.3.2-linux-x86_64.tar.gz 4. 配置elasticsearch.yml cd /usr/local......

joininjoy
14分钟前
34
0
iOS面试题--性能优化篇

1.造成tableView卡顿的原因有哪些? 1.最常用的就是cell的重用, 注册重用标识符 如果不重用cell时,每当一个cell显示到屏幕上时,就会重新创建一个新的cell 如果有很多数据的时候,就会堆积...

G_
22分钟前
44
0
第 430 期 Python 周刊

文章,教程和讲座 使你的 Python 程序运行快一点 链接: https://martinheinz.dev/blog/13 不喜欢 Python 语言的人总是说它的运行速度很慢。对于特定的程序(无论使用何种编程语言), 它的快慢...

iCodeBugs
32分钟前
75
0
Linux中修改环境变量及生效方法

Linux中修改环境变量及生效方法 方法一:   在/etc/profile文件中添加变量【对所有用户生效(永久的)】   用VI在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且...

突突突酱
32分钟前
34
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部