消息中间件——RabbitMQ入门介绍

一、选用RabbitMQ

在这里插入图片描述

消息队列产品有很多,比如说常见的有 RocketMQ、RabbitMQ、ActiveMQ 和 Kafka 。其中 Kafka 的性能是最好的,并发量比较大,而且消息收发的速度也非常快。但是消息收发的可靠性上, Kafka 不如 RabbitMQ ,而且技术选型的时候执行速度并不是唯一标准。比速度的话,汇编语言碾压一切高级语言,但是现在我们写程序几乎不会选用汇编语言,而是要兼顾开发效率、易用性和生态圈。RabbitMQ 还有另外一个杀手锏,那就是既支持消息异步收发,又支持同步收发,这个太牛了。虽然我们现在大部分的场景对应的是消息异步收发,但是有的场合要支持消息的同步收发,这时候RabbitMQ能适应各种业务场景的优点就显现出来了。所以在项目立项的时候,选择 RabbitMQ 是最稳妥的方案。

二、RabbitMQ的五种队列模式

1. 简单模式

一个生产者(发送方)对应一个消费者(接收方)
在这里插入图片描述

2. Work模式

一个生产者对应多个消费者,但是只能有一个消费者获得消息(排他)

在这里插入图片描述

3. 发布/订阅模式

一个消费者将消息首先发送到fanout交换器,交换器绑定到多个队列,然后与之对应的所有消费者都能接收到消息(不排他)
在这里插入图片描述

4. 路由模式

生产者将消息发送到direct交换器,交换器按照关键字(Key),把消息路由到某个队列
在这里插入图片描述

5. 主题模式

生产者将消息发送到Topic交换器,交换器按照复杂的规则,把消息路由到某个队列
在这里插入图片描述

三、消息持久化

消息的可靠性是RabbitMQ的一大特色,那么RabbitMQ是如何保证消息可靠性的呢?答案就是消息持久化。持久化可以防止在异常情况下丢失数据。除了消息持久化之外,甚至交换器和队列都能持久化。

四、消息过期时间

默认情况下,消息是无限期存储在RabbitMQ上面的,但是我们可以设置消息过期时间,到期之后无论该消息是否已经被接收,都会被RabbitMQ删除。

五、Ack应答

消费者接收消息之后,必须返回一个Ack应答,那么RabbitMQ才会认为这条消息接收成功。如果想要删除这条消息,消费者发送Ack应答的时候,附带一个deliveryTag标志位就可以了。

六、同步接收和异步接收

在这里插入图片描述
很多网上的RabbitMQ代码案例,消费者采用的是异步的接收消息。的确这种方式,消耗的系统资源较少。但是小程序和后端项目之间并不是长连接,所以后端项目异步方式接收到队列中的消息,也无法推送给移动端的小程序。也许有人想到了小程序自带的消息推送机制,但是这个推送功能是有严格限制的,有效期和推送的次数都做了非常严格的限定。

在这里插入图片描述
我们可以让后端的Java项目采用同步的方式接收队列中的消息。在移动端,我们创建定时器,然后向后端Java项目发出轮询请求。后端Java项目接收到轮询请求之后,用同步方式接收队列中的消息,然后把消息存储在MongoDB上面,最后向小程序返回接收了多少条新消息,移动端则弹出提示框告知用户有信息的消息通知。

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何壹时

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值