RabbitMQ学习(一)——基本概念

1.1什么是RabbitMQ

MQ全称 Message Queue(消息队列),是在消息的传输过程中保存消息的容器。多用于分布式系统之间进行通信。 RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而群集和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端。 RabbitMQ简单来说就是一个消息队列中间件,用来保存消息和传递消息的一个容器。在此过程中充当一个中间人的作用。

1.2什么是AMQP协议

AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。Erlang中的实现有RabbitMQ等。

1.3为什么使用MQ

1.31流量消峰

如果一个订单系统最多能处理一万次订单,在正常情况下,我们下单后一秒钟内就能返回结果。但是在高峰期,下单了2万次,系统是处理不了的,只能限制订单超过一万次后不允许客户下单。这时候可以使用消息队列做缓冲,把1秒内的下单操作分散成一段时间来处理,这样即使有些用户要在下单十几秒后才能收到下单成功的操作,这也比不能下单要好。

1.32应用解耦

一个电商平台,平台有订单系统、库存系统、物流系统等。用户创建订单后,如果耦合调用上述系统,一旦其中一个系统出了问题,都会导致下单操作出现问题。当转变为基于消息队列的方式后,如果物理系统出现问题,需要几分钟来恢复,在这几分钟里,物流系统需要处理的信息会被缓存在消息队列中,用户下单操作可以正常完成。当物流系统恢复正常后,继续处理订单消息即可。

1.33异步处理

有些服务调用是异步的,例如A调用B,B要执行一段时间,A要知道B什么时候执行完成,此时A可以调用B的查询Api查询,或者B执行完之后,调用A的callbackApi通知A。使用消息队列也可以完成这个操作:A调用B服务后,只需要监听B处理完成的消息,当B处理完成后,会发送一条消息给MQ,MQ会将此消息转发给A。这样A既不用循环调用B的查询Api也不用提供callbackApi,还能及时得到异步处理成功的消息。

1.4四大核心概念

生产者:产生数据、发送消息的程序是生产者

交换机:交换机是RubbitMQ非常重要的一个部件,一方面它接受来自生产者的消息,另一方面它将消息推送到队列中。交换机必须确切知道如何处理它接收到的消息,是将这些消息推送到特定队列还是多个队列,或者是把消息丢弃,这个由交换机类型决定。

队列:队列是RubbitMQ内部使用的一种数据结构,尽管消息流经RabbitMQ和应用程序,但它们只能存储在队列中。队列仅受主机的内存和磁盘限制的约束,本质上是一个大的消息缓冲区。许多生产者可以将消息发送到一个队列,许多消费者可以尝试从一个队列中接收数据。

消费者:消费者大多数时候是一个等待接收消息的程序。生产者、消费者、消息中间件很多时候不是在同一台机器上。同一个应用程序既可以是生产者也可以是消费者。

1.5RabbitMQ的核心部分(六大模式)

1、简单模式(Hello World)

2、工作模式(Work queues)

3、发布订阅模式(Public/Subscribe)

4、路由模式(Routing)

5、主题模式(Topics)

6、发布确认模式(Publisher Confirms)

1.6RabbitMQ的工作原理

Broker:接收和分发消息的应用,RabbitMQ Serve就是Message Broker

Connection:publisher/consumer和broker之间的TCP连接

Channel(通讯通道):如果每一次访问RabbitMQ都建立一个Connection,在消息量大的时候建立TCP Connection的开销将是巨大的,效率也低。Channel是在connection内部建立的逻辑连接,如果应用程序支持多线程,通常每个thread创建单独的channel进行通讯,AMQP method包含了channel id 帮助客户端和message broker识别channe,所以channel之间是完全隔离的。Channel作为轻量级的Connection极大地减少了操作系统建立TCP connection的开销

Virtual host:出于多租户和安全因素设计:的,把AMQP的基本组件划分到一个虚拟的分组中。当多个不同的用户使用同一个RabbitMQ Server提供服务时,可以划分出多个vhost,每个用户在自己的vhost创建exchange/queue

Exchange:message到达broker的第一站。根据分发规则,匹配查询表中的routing key,分发消息到queue 中,常用的类型有:direct(point-to-point),topic(publish-subscribe) and fanout(multicast)

Queue:消息最终会被送到这里等待consumer取走

Binding(绑定交换机和队列):exchange和queue之间的虚拟连接,binding中可以包含routing key,Binding信息被保存到exchange中的查询表中,用于message的分发依据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值