文档章节

RabbitMQ学习(3)

江左煤郎
 江左煤郎
发布于 01/18 19:26
字数 989
阅读 11
收藏 0

1. 消费端

    1. 消费端通过推模式或者拉模式从RabbitMQ中获取并消费消息,当消费者确认处理消息后,可以手动确认消息已被接收,然后就会将该消息从RabbitMQ的队列中标记再清除,消费者端还可以选择拒绝接收到的消息。

    2. 消息分发:只讨论推模式消费消息,如果一个RabbitMQ队列具有多个消费者时,队列收到的消息将默认以轮询方式分发给消费者,即每条消息只会发送给一个消费者。轮询方式指的是,如果有n个消费者,当第m个消息被消费时,会被发送到第m%n个消费者。但是消费者端必须确认接收或者确认拒绝消息之后才能继续处理后续RabbitMQ推送的消息,如果某几个消费端处理部分消息时速度很慢,而另一部分消费端处理很快,这就导致处理快的消费端会进入空闲状态,整体应用的吞吐量下降,使用basicQos方法就可以实现考虑消费端处理效率的分发机制,如果未被ACK(确认接收)或NACK(确认拒绝)的消息数量达到该方法设置的阈值,那么消费端就会停止接收消息,直到未被ACK(确认接收)或NACK(确认拒绝)的消息数量小于阈值。该方法有三个重载版本

void basicQos(int prefetchCount) throws IOException
void basicQos(int prefetchCount, boolean global) throws IOException
void basicQos(int prefetchSize, int prefetchCount, boolean global) throws IOException
  • prefetchCount参数表示当前Channel中最多允许有几个未被ACK(确认接收)或NACK(确认拒绝)的消息,0代表无上限
  • prefetchSize该参数意义不明,RabbitMQ似乎并没有对该参数进行实现,而且必须设置为0否则会报错,0代表无上限,不用设置该参数
  • global该参数若为true则表示设置的prefetchCount参数指定为Channel所属的整个Connection范围,如果在Connection范围内所有未被ACK(确认接收)或NACK(确认拒绝)的消息数量大于prefetchCount,那么所有消费端都会停止接收消息;如果global为false,则表示prefetchCount参数的生效范围仅在当前Channel中

    3. 消息的顺序性:如果希望保证在一个生产者端顺序发送的消息,能够在某一个消费者端按照同样的顺序接收处理,在RabbitMQ中是无法实现的,除非生产者端、队列和消费端都是一对一关系,而且要求消息不会被丢失或者拒绝的情况下才会实现。

    4. 消息传输保障:RabbitMQ能够保证消息的“最多一次”和“最少一次”正确传输。最多一次的保障比较简单,发送端随便发送消费端随便接收;最少一次的保障有多种方法,比如

  • 在发送端,通过basicPublish方法中的mandatory参数设置或者设置备份交换器来确保消息会被正确发送到RabbitMQ
  • 通过confirm机制或事务机制确认消息的正确发送
  • 选择持久化队列、交换器,保证消息不会再RabbitMQ重启后丢失
  • 消费端调用basicConsume方法时,应将autoAck方法设为false,通过手动确认的方式保证正确接收消息

还有另一种传输保障,就是“只有一次”正确传输,该保障RabbitMQ无法实现。

© 著作权归作者所有

共有 人打赏支持
江左煤郎
粉丝 26
博文 86
码字总数 220642
作品 0
西安
后端工程师
私信 提问
zabbix自动发现rabbitmq

参考文档 http://blog.csdn.net/qq29778131/article/details/52537288?ticket=ST-77459-cUGNcZF1BJBtNuZoZe1i-passport.csdn.net #python脚本 一,实现功能 实现自动发现rabbitmq queue,并监......

typuc
2018/06/26
0
0
消息中间件—RabbitMQ(集群原理与搭建篇)

摘要:实际生产应用中都会采用消息队列的集群方案,如果选择RabbitMQ那么有必要了解下它的集群方案原理 一般来说,如果只是为了学习RabbitMQ或者验证业务工程的正确性那么在本地环境或者测试...

癫狂侠
2018/05/25
0
0
rabbitmq-server 安装

一,安装rabbitmq-server 1.安装erlang wget https://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm rpm -Uvh erlang-solutions-1.0-1.noarch.rpm rpm --import https:/......

丿小贰丶
2018/05/08
0
0
在CentOS上安装rabbitmq

转自:http://flyingdutchman.iteye.com/blog/1887283 这文章写得很好,除了安装软件编译时间比较长之外,安装这个几乎没出现什么错误。现在去配置下rabbitmq,马上就可以使用了。 在本节中我...

mac_zhao
2014/09/28
0
0
【原创】rabbitmq-echopid用户手册(翻译)

为了方便工作中使用,周末抽空对 rabbitmq-echopid 用户手册进行了翻译,鉴于自己水平有限,翻译中难免有纰漏产生,如果疑问,欢迎指出探讨。 官方原文:http://www.rabbitmq.com/man/rabbi...

摩云飞
2012/11/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

RabbitMQ入门

RabbitMQ是一个由erlang开发的基于AMQP(Advanced Message Queue)协议的开源实现。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面都非常的优秀。是当前最主流的消息中间...

watermelon11
今天
15
0
今天的学习

自动加载:方法一 function __autoload( $className ){在这里,完成加载B这个类文件的工作。}class A{} //这是一个类$a1 = new A(); //这里没有自动加载的发生,因为A这个类...

墨冥
今天
2
0
印刷工艺步骤

印刷厂从收到订单到交付整个流程,一般涉及到以下步骤 1.设计(经过软件如cdr,psd,ai等等设计需要印刷的名片,宣传单,画册等物料); 2.排版拼版(在电脑软件这区域完成); 3.出版、出硫...

focusone
昨天
4
0
virtualbox中安装ubuntu

virtualbox+ubuntu 安装virtualbox,当前版本是6.0.4 下载ubuntu安装盘,建议lubuntu,链接是http://mirrors.ustc.edu.cn/ubuntu-cdimage/lubuntu/releases/18.04.2/release/lubuntu-18.04.......

chuqq
昨天
5
0
exists 谓词的子查询

https://blog.csdn.net/qq_19782019/article/details/78730882

仟昭
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部