RabbitMQ

什么是mq:

mq就是消息队列,能帮助我们实现上下游的消息传递,是一种消息跨进程的通信机制

为什么要用mq:

  1. 流量消峰

假如订单系统最多只能处理一万次订单,但是在高峰期,超过了一万订单之后就会崩。这时候就要我们做消息队列缓冲,让访问的人员进行排队,来达到消峰的目的。访问的速度会有所下降,但是总比崩盘了好。

  1. 应用解耦

以电商系统为例,应用中订单系统需要调用库存系统、支付系统、物流系统,如果在调用过程中,任何一个系统调用失败,那么就会下单异常。

如果我们用消息队列,由消息队列发送消息给库存系统、支付系统、物流系统,如果有系统故障,那么消息队列会一直监督他完成。

  1. 异步处理

RabbitMq的概念:

四大核心:

可以用发快递来举例:

RabbitMQ工作原理

生产者代码:

代码可以对应上图,都是根据图中的步骤来的。

首先创建工厂,设置完成地址,用户名和密码。第二步就是创建链接,然后创建信道,通过信道去链接交换机,交换机链接队列,也可以通过默认交换机去链接队列,最后再通过链接中的信道,发消息给消费者。

通过信道发送消息

消息发送完毕之后,我们可以从Rabbit后台界面当中找到队列

消费者代码

  1. 创建工厂

  1. 创建连接、信道

  1. 声明 接收消息

  1. 取消消息时的回调

Rabbit工作队列原理:

简单俩说就是生产者发送了大量的消息,有多个消费者接收处理消息,消费者之间是竞争关系,消息轮训接收。

消息应答概念

消息应答分为自动应答和手动应答

自动应答接收到消息后,马上就会应答,不一定完没完成工作,所以并不靠谱,需要一个优良的环境下才能用自动应答。

手动应答的方法:

手动应答的好处就是可以批量应答,减少网络堵塞

建议不要批量应答,因为如果有A、B、C三个消息,如果当前执行完的是C那么就应答C,如果A、B没有执行完成,批量应答也会进行应答,也可能会出现消息丢失的情况,所以尽量不要批量应答。

消息重新入队

向C1、C2中发送消息,如果C1宕机了,出现了故障,那么这个数据不会丢失,会重新返回队列,然后再交给C2进行处理。

Rabbit持久化

Rabbit是可以进行持久化的,可以将消息和队列进行持久化,持久化的目的就是为了保证数据不丢失。

队列持久化:

队列如果不做持久化,如果Rabbit重启,该队列就会被删除掉

消息持久化:

如果队列做了持久化,消息没做持久化,当队列遇到故障重启了,消息就会丢失。

不公平分发:

预取值分发:可以设定每个消费者接收多少条消息

确认发布:

单个确认发布:

批量确认发布:

异步确认发布:

需要写一个监听器

如何处理异步为确认消息?

在开启消息发布确认下面,写一个线程安全有序的一个哈希表 适用于高并发的情况下

之后在发消息的时候进行记录,每发一次消息记录一次

删除已经确认的消息

RabbitMq交换机的作用

之前说的都是简单模式,不需要交换机

下面说的就是发布订阅模式,需要交换机

交换机的概念:

交换机类型:

临时队列:就是不做持久化的,结束之后队列将被自动删除

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值