初识RabbitMQ

1.为什么要使用 MQ?

微服务架构后,链式调用是我们在写程序时候的一般流程,为了这完成一个整体功能会把它拆分成多 个函数(或子模块)比如模块 A 调用模块 B,模块 B 调用模块 C,模块 C 调用模块 D。但是大型分布式应用 中,系统间的 RPC 交互复杂,一个功能后面要调用上百个接口并非不可能,从单机架构过渡到分布式微服务架构,这样的架构有没有问题呢?

有 根据上面的几个问题,在设置系统时可以明确要达到的目标

1,要做到系统解耦,当新的模块进来时,可以做到代码改动最小; 能够解耦

2,设置流程缓冲池,可以让后端系统按自身吞吐能力进行消费,不被冲垮; 能够削峰

3,强弱依赖梳理能把非关键调用链路的操作异步化并提升整体系统的吞吐能力;能够异步

定义

面向消息的中间件(message-oriented middleware0) MOM 能够很好的解决以上的问题。 是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。 通过提供消息传递和消息排队模型在分布式环境下提供应用解耦,弹性伸缩,冗余存储,流量削峰,异步 通信,数据同步等

大致流程

发送者把消息发给消息服务器,消息服务器把消息存放在若干队列/主题中,在合适的时候,消息服务器会把消息转发给接受者。在这个过程中,发送和接受是异步的,也就是发送无需等待,发送者和接受者的生命周期也没有必然关系在发布 pub/订阅 sub 模式下,也可以完成一对多的通信,可以让一个消息有多 个接受者[微信订阅号就是这样的]

2.特点

异步处理模式

消息发送者可以发送一个消息而无需等待响应。消息发送者把消息发送到一条虚拟的通道(主题或队 列)上;

消息接收者则订阅或监听该通道。一条信息可能最终转发给一个或多个消息接收者,这些接收者都无需对消息发送者做出回应。整个过程都是异步的。

案例: 也就是说,一个系统和另一个系统这间进行通信的时候,假如系统 A 希望发送一个消息给系统 B,让它去处理,但是系统 A 不关注系统 B 到底怎么处理或者有没有处理好,所以系统 A 把消息发送给 MQ,然后 就不管这条消息的“死活” 了,接着系统 B 从 MQ 里面消费出来处理即可。至于怎么处理,是否处理完毕, 什么时候处理,都是系统 B 的事,与系统 A 无关。

这样的一种通信方式,就是所谓的“异步”通信方式,对于系统 A 来说,只要把消息发给 MQ,然后系统 B 就会异步处去进行处理了,系统 A 不能“同步”的等待系统 B 处理完。这样的好处是什么呢?解耦

应用系统的解耦

发送者和接收者不必了解对方,只需要确认消息 发送者和接收者不必同时在线

现实中的业务

3. RabbitMQ 概述及注意点

RabbitMQ 是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。

RabbitMQ 服务器是用 Erlang 语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。

总结:RabbitMQ 实现了 AMQP 协议来构建自己的消息队列 RabbitMQ 是 Erlang 语言写的,但是我们有操作 RabbitMQ 的 java 的驱动

面试问题: Activemq 和 RabbitMq 的区别 根本的区别:

Activemq 他实现的是 JMS 协议(Java 消息协议)

RabbitMQ 实现的是 AMQP 协议(高级消息队列协议)

Activemq : 是 Java 写的

RabbitMQ : Erlang 写的: 吞吐更多,延时更低!!

当然:区别还有很多

4.RabbitMQ 名词解释

Message

消息,消息是不具名的,它由消息头和消息体组成。消息体是不透明的,而消息头则由一系列的可选属性 组成,这些属性包括 routing-key(路由键)、priority(相对于其他消息的优先权)、delivery-mode (指出该消息可能需要持久性存储)等。

Publisher

消息的生产者,也是一个向交换器发布消息的客户端应用程序。

Exchange

交换器,用来接收生产者发送的消息并将这些消息路由给服务器中的队列。

Binding

绑定,用于消息队列和交换器之间的关联。一个绑定就是基于路由键将交换器和消息队列连接起来的路由 规则,所以可以将交换器理解成一个由绑定构成的路由表。

Queue

消息队列,用来保存消息到发送给消费者。它是消息的容器,也是消息的终点。一个消息可投入一个或多个队列。消息一直在队列里面,等待消费者连接到这个队列将其取走。

Connection

信道,多路复用连接中的一条独立的双向数据流通道。信道是建立在真实的 TCP 连接内地虚拟连接,AMQP 命令都是通过信道发出去的,不管是发布消息、订阅队列还是接收消息,这些动作都是通过信道完成。因 为对于操作系统来说建立和销毁 TCP 都是非常昂贵的开销,所以引入了信道的概念,以复用一条 TCP 连接。

Consumer

消息的消费者,表示一个从消息队列中取得消息的客户端应用程序。

Virtual Host

虚拟主机,表示一批交换器、消息队列和相关对象。虚拟主机是共享相同的身份认证和加密环境的独立服 务器域。每个 vhost 本质上就是一个 mini 版的 RabbitMQ 服务器,拥有自己的队列、交换器、绑定和 权限机制。vhost 是 AMQP 概念的基础,必须在连接时指定,RabbitMQ 默认的 vhost 是 / 。

Broker

表示消息队列服务器实体。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值