作为消费者的客户端要消费Rabbitmq的消息,首先要建立与它某个队列的连接,具体连接时可指定队列的BindingKey和关系的exchange标识,Rabbitmq判断若已有队列通过BindingKey与exchange标识关联则允许消费者消费队列的消息,否则新建一个队列用指定的BindingKey与exchange关联,获取特定的消息。若果exchange是topic类型则也可用通配符‘#’获取所有发到这个exchange的消息。

rabbitmq一个队列类似一个消费群组,当有多个消费者都关注这个队列消息时,它会将消息平均分配给各个消费者。若果不同应用消费者想要订阅所有发到exchange的消息,则可以建不同的group消费。

rabbitmq默认消息、队列、交换器(exchange)都不具有持久化的性质,如果应用需要持久化功能,那么在声明时要配置好。首先交换器和队列的声明时要指定durable参数为true,这样重启后队列和交换器都会恢复。然后消息在发送时要在properties中指定delivery_mode = 2,这样服务重启后队列中的这种消息可以恢复。但消息的持久化不是一个强约束,涉及数据落地的时机及系统层面同步问题,若要尽可能提高消息的持久化有效性,可配置状态反馈的confirm mode。

状态反馈的目的是为了确认行为的结果。当你向exchange提交消息时,是否提交成功,是否送达到队列,队列中的消息是否被消费者正常消费等问题都要考虑。在AMQP中要确保消息业务可靠性只能使用事务,不过rabbitmq有些简便的扩展机制如状态确认可到达同样的目的。

rabbitmq中状态反馈分为发布状态反馈和提取状态反馈。具体发布消息时设置channel的confirm mode,这样对持久化消息被投递到一个持久化队列成功并且把数据写入磁盘时会给发送者一个状态确认;在未关闭消息的ack机制情况下,当消息被consumer从队列提取后,在未明确收到确认消息之前,队列中的消息不会被删除,而是变成等待确认状态,当consumer反馈成功给队列时,消息才会被删除,若consumer反馈拒绝给队列,则消息可能再被其它consumer提取。

https://www.zouyesheng.com/rabbitmq.html#toc11

RabbitMQ消息的消费与持久化的更多相关文章

  1. 压测应用服务对RabbitMQ消息的消费能力--实践脚本

    最近运维跟我反馈我负责的应用服务线上监控到消费RabbitMQ消息队列过慢,目前只有20左右,监控平台会有消息积压的告警. 开发修改了一版应用服务的版本,提交给我做压测验证. 之前没有做过消息中间件的 ...

  2. Python RabbitMQ消息持久化

    RabbitMQ消息持久化:就是将队列中的消息永久的存放在队列中.   处理方案: # 在实例化时加入durable=True来确认消息的实例化,客户端服务端都要写 channel.queue_dec ...

  3. Python操作rabbitmq消息队列持久化

    消息队列持久化 Python操作rabbit消息队列的持久化,如下: # 创建一个名为balance的队列,对queue进行durable持久化设为True(持久化第一步)channel.queue_ ...

  4. RabbitMQ消息丢失问题和保证消息可靠性-消费端不丢消息和HA(二)

    继续上篇文章解决RabbitMQ消息丢失问题和保证消息可靠性(一) 未完成部分,我们聊聊MQ Server端的高可用和消费端如何保证消息不丢的问题? 回归上篇的内容,我们知道消息从生产端到服务端,为了 ...

  5. 【朝夕专刊】RabbitMQ消息的持久化优先级

    欢迎大家阅读<朝夕Net社区技术专刊> 我们致力于.NetCore的推广和落地,为更好的帮助大家学习,方便分享干货,特创此刊!很高兴你能成为忠实读者,文末福利不要错过哦! 上篇文章介绍了R ...

  6. rabbitmq 消息持久化

    rabbitmq 消息持久化 2016-02-18 11:19 224人阅读 评论(0) 收藏 举报  分类: 综合(15)  版权声明:本文为博主原创文章,未经博主允许不得转载. 二: 任务分发 & ...

  7. RabbitMQ消息发布和消费的确认机制

    前言 新公司项目使用的消息队列是RabbitMQ,之前其实没有在实际项目上用过RabbitMQ,所以对它的了解都谈不上入门.趁着周末休息的时间也猛补习了一波,写了两个窗体应用,一个消息发布端和消息消费 ...

  8. springboot项目整合rabbitMq涉及消息的发送确认,消息的消费确认机制,延时队列的实现

    1.引入maven依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactI ...

  9. 使用EasyNetQ组件操作RabbitMQ消息队列服务

    RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue)的开源实现,是实现消息队列应用的一个中间件,消息队列中间件是分布式系统中重要的组件,主要解决应用耦合, ...

随机推荐

  1. Post with HttpClient4

    转载:http://www.cnblogs.com/luxiaoxun/p/6165237.html 作者:阿凡卢 出处:http://www.cnblogs.com/luxiaoxun/ HttpC ...

  2. leetcode 427. Construct Quad Tree

    We want to use quad trees to store an N x N boolean grid. Each cell in the grid can only be true or ...

  3. yum 数据库报错与重构

    [root@dhcp yum.repos.d]# cd /var/lib/rpm/ [root@dhcp rpm]# rm __db.* -rf[root@dhcp rpm]# rpm --rebui ...

  4. request.getPathInfo() 方法的作用

    request.getPathInfo(); 这个方法返回请求的实际URL相对于请求的serlvet的url的路径.(个人理解.) 比如,有一个Servlet的映射是这样配置的: <servle ...

  5. 连接GitHub的方法

    连接到GitHub 首先在本地创建 ssh key: ssh-keygen -t rsa -C "your_email@youremail.com" 后面的 your_email@ ...

  6. JQuery遍历CheckBox踩坑记

    $("#checkbox_id").attr("checked"); //获取一个CheckBox的状态(有没有被选中,返回true/false) $(&quo ...

  7. jQuery 滑动选项卡SmartTab

    Smart Tab Overview Smart Tab is a jQuery plugin for tabbed interface. It is flexible and very easy t ...

  8. js的事件循环机制和任务队列

    上篇讲异步的时候,提到了同步队列和异步队列的说法,其实只是一种形象的称呼,分别代表主线程中的任务和任务队列中的任务,那么此篇我们就来详细探讨这两者. 一.来张图感受一下 如果看完觉得一脸懵逼,请继续往 ...

  9. java中遍历类中的属性、调用getter&setter方法

    public static void testReflect(Object model) throws NoSuchMethodException, IllegalAccessException, I ...

  10. Kotlin Reference (二) Idioms

    most from reference 一些常用操作 创建单例类 object 数据类data classList.Map.Array的简单操作Lazy延迟加载属性空类型?空类型表达式?..?:.?. ...