【RabbitMQ】学习笔记(一)

 

1、为什么我们认为应该选择RabbitMQ呢?
除了Qpid之外,RabbitMQ是唯一实现了AMQP标准的代理服务器
正式由于Erlang,RabbitMQ集群不可思议的简单
每个人的经历不同,但我们发现RabbitMQ比竞争对手更可靠,更能防止崩溃
RabbitMQ难以置信的容易安装和使用
2、为什么通信过程需要信道呢?为什么不直接通过TCP连接发送AMQP命令呢?
主要原因在于对操作系统来说建立和销毁TCP会话是非常昂贵的开销,比如只进行TCP连接,每个线程都要自行连接到Rabbit,在高峰期每秒成百上千条的连接,很容易碰都性能瓶颈,而信道可以为所有线程只使用一条TCP连接满足性能方面的要求的同时又能确保每个线程的私密性。信道的概念如下:线程启动后,会在现成的连接上创建一条信道,也就获得了连接到Rabbit上的私密通信路径,不会给操作系统的TCP栈造成额外的负担。一条TCP连接上可以创建多条信道,类似于光缆。
① 每个线程使用一个连接,意味着你的应用程序在响应当前请求时,无法处理其他的请求
② 每个发送线程都分配了TCP连接,会浪费TCP资源
③ 多个信道线程可以同时共享连接,对请求的应答不会阻塞消费新的请求,不会浪费TCP连接
3、如果至少一个消费者订阅了队列的话,消费会立即发送给这些订阅者的消费者,但是如果消息到达了无人订阅的队列呢?
消息会在队列中等待。一旦有消费者订阅到该队列,那么队列上的消息就会发送给消费者。

 

4、当有多个消费者订阅到同一个队列上时,消息是如何分发的?
当Rabbit队列拥有多个消费者时,队列收到的消息将以循环的方式发送给消费者。每条消息只会发送给一个订阅的消费者。
举例:
有seed_bin队列、消费者Bob和LiMing、分别订阅到seed_bin队列
消息A到达seed_bin队列
RabbitMQ把消息A发送给Bob
Bob确认接收该消息A
RabbitMQ把消息A从seed_bin删除

消息B到达seed_bin队列
RabbitMQ把消息B发送给LiMing
LiMing确认接收该消息B
RabbitMQ把消息B从seed_bin删除
5、如果消费者收到一条消息,然后确认之前从Rabbit断开连接(或者从队列上取消订阅),该消息会怎么处理?
RabbitMQ会认为这条消息没有分发,然后重新分配给下一个订阅的消费者,如果程序崩溃了,这样做可用确保消息会被发送给另外一个消费者进行处理。另一方面,如果应用程序有bug而忘记确认消息的话,Rabbit将不会给该消费者发送更多的消息。因为在上一条没有被确认之前,Rabbit会认为这个消费者并没有准备好接收下一条消息。对于那些处理消息内容非常耗时,会存在延时确认该消息的情况,这样做可以防止Rabbit持续不断的消息涌向你的应用而导致过载
6、收到消息后,如果想要明确拒绝,而不是确认收到该消息,如何做?
前提:消费接收到消息后,消息尚未确认,有如下两个选择:
① 把消费者从RabbitMQ服务器断开连接。这样Rabbit自动重新把消息入队并发送给另一个消费者,缺点:连接/断开方式会额外增加RabbitMQ负担
② 如果RabbitMQ2.0.0或者更新的版本,可以使用AMQP的basic.reject命令拒绝RabbitMQ发送的消息。reject命令requeue参数设置为true,RabbiitMQ会将消息发送给下一个订阅的消费者,如果为false,RabbitMQ会将消息从队列中移除,不会把它发送给新的消费者
7、如果尝试声明一个已经存在的队列会发生什么?
只要声明参数完全匹配现存队列的话,Rabbit就什么都不做,并成功返回。(如果参数不匹配,队列声明尝试会失败)。如果想检测队列是否存在,设置quue.declare的passive选项为ture,如果队列存在queue.declare命令会成功返回;否则不创建队列返回一个错误

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

女汉纸一枚

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

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

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

打赏作者

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

抵扣说明:

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

余额充值