一、消息分发

RabbitMQ中的消息都只能存储在Queue中,生产者(下图中的P)生产消息并最终投递到Queue中,消费者(下图中的C)可以从Queue中获取消息并消费。

多个消费者可以订阅同一个Queue,这时Queue中的消息会被平均分摊给多个消费者进行处理,而不是每个消费者都收到所有的消息并处理。

启动3个消费者

生产者依次生成3条消息

可见3条消息分别被3个消费者获取,所以RabbitMQ是采用轮询机制将消息队列Queue中的消息依次发给不同的消费者

二、消息确认(Message Acknowledgment)

在实际应用中,可能会发生消费者收到Queue中的消息,但没有处理完成就宕机(或出现其他意外)的情况,这种情况下就可能会导致消息丢失。为了避免这种情况发生,我们可以要求消费者在消费完消息后发送一个回执给RabbitMQ,RabbitMQ收到消息回执(Message acknowledgment)后才将该消息从Queue中移除;如果RabbitMQ没有收到回执并检测到消费者的RabbitMQ连接断开,则RabbitMQ会将该消息发送给其他消费者(如果存在多个消费者)进行处理。这里不存在timeout概念,一个消费者处理消息时间再长也不会导致该消息被发送给其他消费者,除非它的RabbitMQ连接断开。

如何来实现呢?只需要将consumer消费者端中 no_ack = True去掉就行了

no_ack 就 no acknowlegment的意思,这个参数会导致RabbitMQ并不关心消费者有没有处理完成,可能在消费者获取消息后就将该消息从Queue中移除。去掉这个参数,如果在消费者执行过程当初出现了意外(宕机),RabbitMQ没有收到消息回执,就会发送给其他消费者执行。

修改consumer端

运行3个消费者,接收生产者的数据,依次关闭消费者1和消费者2,最后RabbitMQ中的消息还是会被消费者3处理。

RabbitMQ 的详细介绍:请点这里

RabbitMQ 的下载地址:请点这里

linux消息分发机制,RabbitMQ消息分发轮询和Message Acknowledgment相关推荐

  1. 负载均衡轮询算法和服务器性能,SpringCloud-Ribbon负载均衡机制、手写轮询算法

    Ribbon 内置的负载均衡规则 在 com.netflix.loadbalancer 包下有一个接口 IRule,它可以根据特定的算法从服务列表中选取一个要访问的服务,默认使用的是「轮询机制」 Ro ...

  2. RabbitMQ消息确认机制和消息重发机制

    一.机制 首先我们要知道一条消息的传递过程. 生产者 -> 交换机 ->  队列 我们的生产者生产消息,生产完成的消息发送到交换机,由交换机去把这个消息转发到对应的队列上.这其中我们可能在 ...

  3. rabbitmq消息队列 ack机制(消息确认机制)和消息补偿机制

    参考:https://blog.csdn.net/pan_junbiao/article/details/112956537 ack 机制就是消息在 生产者在发布消息以后,消息存在内存中,如果消息被确 ...

  4. 消息队列探秘-RabbitMQ消息队列介绍 侵立删

    1. 历史 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有 ...

  5. 消息队列探秘 – RabbitMQ 消息队列工作原理

    1. 历史 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有 ...

  6. 【Soul源码阅读】12.soul-admin 与 soul-bootstrap 同步机制之 http 长轮询解析(上)

    目录 1.前情回顾 2.配置 2.1 soul-admin 2.2 soul-bootstrap 3.启动 3.1 启动 soul-admin 3.2 启动 soul-bootstrap 3.2.1 ...

  7. 轮询机制php,JS事件轮询机制讲解

    JS是单线程语言,深入理解JS里的Event Loop,本文主要和大家分享JS事件轮询机制,希望能帮助到大家. JS的执行机制(一): 1.首先判断JS是同步还是异步,同步就进入主进程,异步就进入ev ...

  8. python消息订阅_python rabbitmq消息发布订阅

    发送端:import pika import sys connection = pika.BlockingConnection(pika.ConnectionParameters( host='loc ...

  9. 轻松搞定RabbitMQ(二)——工作队列之消息分发机制

    上一篇博文中简单介绍了一下RabbitMQ的基础知识,并写了一个经典语言入门程序--HelloWorld.本篇博文中我们将会创建一个工作队列用来在工作者(consumer)间分发耗时任务.同样是翻译的 ...

  10. RabbitMQ 基本消息模型和消息确认机制

    ​01 前言 关于 RabbitMQ 服务器的安装,本章节不做介绍,请培养个人动手能力,自行百度解决.RabbitMQ 成功安装后(win 版),浏览器输入:localhost:15672,则可以进入 ...

最新文章

  1. 设计模式-创建型模式-工厂模式(工厂三兄弟) TypeScript
  2. 区域和裁减区域-Window GDI
  3. 阿里云ECS服务器搭建wordpress个人博客网站【详细图文教程】
  4. 在查询的结果中添加自增列 两种方法
  5. 日常问题——pdsh localhost Connection refused
  6. css案例学习之id要唯一
  7. Spring-core-ClassUtils类
  8. 牛客小白月赛13 解题报告
  9. 开源性能测试工具JMeter快速入门(二)
  10. python入门程序例子_Python 爬虫从入门到放弃(11 个有趣的 Python 爬虫例子)
  11. SWT/JFace常用组件----容器类
  12. 在spring boot中3分钟上手RPC框架Dubbo
  13. Android sdk下载安装配置教程
  14. leetcode 合并两个有序数组
  15. 进程管理——PV操作
  16. Word双面打印自动确定器
  17. [计算机通信网络]Packet tracer中laptop连接无线路由器
  18. scala spark dataframe添加序号(id)列
  19. 基于SSM框架实现文件上传并插入数据库
  20. 三种有序表的查找算法

热门文章

  1. CCS编译错误:error #10099-D和error#10234-D unresolved symbols remain解决方法
  2. Pandas学习-练习题
  3. OSG中osg::ref_ptf类的巧妙设计
  4. 世界上第一台计算机论文,世界上公认的第一台电子计算机是1946年诞生。.doc
  5. GEEer成长日记六:Sentinel-2计算逐日NDVI时间序列
  6. swift语言实战晋级-第9章 游戏实战-跑酷熊猫-9-10 移除平台与视差滚动
  7. 《我想进大厂》之分布式锁夺命连环9问 | 大理版人在囧途
  8. Golang语言移植-ARM开发环境搭建
  9. k线必涨的20种形态图
  10. win7中inter信息服务器,Win7系统Internet选项在哪里?