【RabbitMQ学习笔记】2:认识消息通信与RabbitMQ的基本概念

版权声明:本文为博主原创学习笔记,如需转载请注明来源。 https://blog.csdn.net/SHU15121856/article/details/81591042

跟着《RabbitMQ实战》学习一下,据说这本书偏运维,而且有些API已经变了,不过手头只有这本,结合着网络查一查学一学吧。

简述

消息队列

关于为什么要使用消息队列可以见这篇,特别是当需要做系统集成的时候。提前为系统使用消息队列(即便系统目前看起来还不需要),能在系统不断演进发展,甚至将很多处理改成异步时受益。它还能够解耦通信协议,可以快速地切换施展通信使用的编程语言,它可以将不同语言编写的应用程序胶合在一起。

RabbitMQ

RabbitMQ是一种消息队列产品,它实现了AMQP协议,目前了解下主要胜在消息传输更可靠稳定,具体关于AMQP可以见这篇。不同的MQ产品有不同的适应场景,网上很多文章分析它们。

消息通信

消息通信就是指如数据投递、非阻塞操作、推送通知、发布/订阅模式、异步处理、工作队列等系统中信息交互的模式。

IM和Email

这是两种广泛使用的、典型的而又截然不同的通信方式。

Email(电子邮箱)

Email不是即时的,并且它可以为离线用户存储消息,就像发短信一样,关于Email的基本原理可以见这篇,写得很简略可以大致了解一下。

IM(即时通信)

IM是实时的,比如两个人开视频,都能相互看到对方的实时状态,即时通信的原理可以见这篇

认识消息通信之于RabbitMQ

AMQP相比IM和Email

AMQP(高级消息队列协议)相比Email:

  • 一样可以为离线消费者存储消息
  • 根据标签路由的消息比Email更灵活
  • 这些消息没有固定的结构,Email却有

相比IM:

  • 它隐去了消息的发送方和接收方,但IM必须指明
  • AMQP没有”存在”这个概念,但IM是区分在线和离线的

实现了AMQP协议的消息队列很少,这是RabbitMQ的重要特色。

从生产者到消费者的消息流

生产者(producer)是生产消息的应用程序,消费者(consumer)则是接收和使用消息的应用程序。消息(message)包括有效载荷(payload)和标签(label),有效载荷可以是任意内容的要传输的数据,标签比较复杂,后面再细学。

生产者将消息发布代理服务器上,RabbitMQ就是一个接受消息的代理服务器。而消费者则是连接到代理服务器上,并订阅到其上的队列(queue)上,这就是前面提到的发布/订阅模式。

消费者只能获得消息的有效载荷(不获得标签),并不能感知到消息是谁生产的,因此前面说它隐去了消息的发送方和接收方。不过发送者可以自己在有效载荷里写明自己的身份,毕竟有效载荷可以是任何内容。

TCP连接和AMQP信道

这两者就涉及到之前学过的计算机系统的一大概念——虚拟。AMQP信道(channel)是建立在真实的TCP连接内的虚拟连接,即多个AMQP信道共享一个TCP连接,而又不相互影响,对外虚拟成了好像具有”多个连接”的样子。

使用这种方式,虽然单条信道的效率不如一个真的TCP连接,但好在这种方式不需要频繁建立和销毁TCP会话,因为AMQP信道连接或者断开,外面的TCP连接还是连着的。主要是TCP会话的连接和断开很耗费资源,另一方面TCP资源非常有限。总之信道就是多个线程共享连接,AMQP可以被看作加强版的传输层。

交换器,路由键,绑定,队列

前面说生产者将消息发布到RabbitMQ上,实际是发布到其队列(queue)上,这个过程的具体实现是:生产者将消息发送给交换器(exchanger)上,而队列通过路由键(routing key)来绑定(binding)到交换器,也即RabbitMQ会将消息的路由键和该交换器上绑定的路由键尝试匹配,如果相匹配的话,消息就会发送到这个队列。

RabbitMQ根据路由键将消息从交换器路由到队列,而RabbitMQ的交换器有四种类型,用来决定投递到队列的具体规则:

  • headers交换器:匹配AMQP消息的header而非路由键
  • direct交换器:路由键匹配就直接投递到相应队列
  • fanout交换器:将消息广播投递给绑定在该交换器上的所有队列
  • topic交换器:topic交换器能制定复杂的路由关系,而不仅是前面的单纯匹配或广播

虚拟主机

虚拟主机(vhost)是在RabbitMQ服务器上创建的虚拟消息服务器,它拥有自己的交换器、队列、绑定、权限控制,因此可以用一个RabbitMQ服务来服务众多的应用程序。

虚拟主机能使得各个应用程序在逻辑上分离,默认的vhost是/,缺省的用户名和密码都是guest

猜你喜欢

转载自blog.csdn.net/SHU15121856/article/details/81591042