RabbitMQ基础概念

消息的确认

  RabbitMQ需要对每一条发送的消息进行确认。消费者必须通过AMQP的basic.ack命令显式地向RabbitMQ发送一个确认,或者在订阅到队列的时候就将auto_ack参数设置为true。当auto_ack为true时,一旦消费者接收消息,RabbitMQ会自动视其确认了消息。需要注意的是消费者对消息的确认和告诉生产者消息已经被接收了这两件事毫不相关。以此,消费者通过确认命令告诉RabbitMQ它已经确认地接收到消息,同时RabbitMQ才能安全的把消息从队列中删除。

  如果消费者受到一条消息,然后确认之前从RabbitMQ断开连接(或者从队列上取消订阅),RabbitMQ会认为这条消息没有分发,然后重新分发给下一个订阅的消费者。如果你的应用程序崩溃了,这样做可以确保消息会被发送给另一个消费者处理。另一方面,如果应用程序有bug而忘记确认消息的话,RabbitMQ将不会给该消费者发送更多的消息。这是因为在上一条消息被确认之前,Rabbit会认为这个消费者没有准备好接收下一条消息。利用这一点,可以防止rabbit持续不断的消息涌向你的应用而导致过载。

  在收到消息后,如果想要拒接而不是确认收到消息,有两种做法:

  (1)、把消费者从RabbitMQ服务器断开连接,这会导致RabbitMQ自动重新把消息入队并发送给另一个消费者,这样做的好处是所有的RabbitMQ版本都支持。缺点是,这样的连接、断开连接的方式会额外增加RabbitMQ的负担。

  (2)、如果使用的是RabbitMQ2.0.0或更高版本,可以使用AMQP的basic.reject命令。顾名思义:basic.reject允许消费者拒绝RabbitMQ发送消息。如果把reject命令的requeue设置为true的话,RabbitMQ会将消息重新发送给下一个订阅者。如果设置为false的话,RabbitMQ会立即把消息从队列中移除,而不会把它发送给新的消费者。

原文地址:https://www.cnblogs.com/oskyhg/p/8521705.html

时间: 2024-10-01 06:42:51

RabbitMQ基础概念的相关文章

RabbitMQ基础概念详细介绍

你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相互调用.通讯的问题而苦恼.挣扎?如果是,那么恭喜你,消息服务让你可以很轻松地解决这些问题. 消息服务擅长于解决多系统.异构系统间的数据交换(消息通知/通讯)问题,你也可以把它用于系统间服务的相互调用(RPC).本文将要介绍的RabbitMQ就是当前最主流的消息中间件之一. RabbitMQ简介 AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议

rabbitmq 基础概念介绍

[引言] 你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相互调用.通讯的问题而苦恼.挣扎?如果是,那么恭喜你,消息服务让你可以很轻松地解决这些问题. 消息服务擅长于解决多系统.异构系统间的数据交换(消息通知/通讯)问题,你也可以把它用于系统间服务的相互调用(RPC).本文将要介绍的RabbitMQ就是当前最主流的消息中间件之一. [RabbitMQ简介] AMQP,即Advanced Message Queuing Protocol,高级消息队列协议

RabbitMQ 基础概念

Broker:消息协商器.消息队列的实体,它在TCP/IP等端口上监听AMQ消息 vHost:虚拟主机.功能上类似于web的虚拟主机,都是把数据按照功能或项目的不同划分为不同的虚拟主机:用户只被授予访问虚拟主机的权限,而没有其他比这高级的访问控制措施.客户端与Broker沟通需要先建立连接,这些连接仅限于连接用户和虚拟主机. channel:通道.客户端在连接中声明一个通道,这个通道是客户与Broker之间的一个逻辑连接:客户端的操作都是通过通道来实现的.具体的操作需要客户端声明相应的组件. 常

RabbitMQ基础概念详解(一)——环境配置及模拟生产者和消费者简单消息发送

一.简介: RabbitMq 是实现了高级消息队列协议(AMQP)的开源消息代理中间件.消息队列是一种应用程序对应用程序的通行方式,应用程序通过写消息,将消息传递于队列,由另一应用程序读取 完成通信.而作为中间件的 RabbitMq 无疑是目前最流行的消息队列之一. AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计.消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然.

RabbitMq基础教程之基本概念

RabbitMq基础教程之基本概念 RabbitMQ是一个消息队列,和Kafka以及阿里的ActiveMQ从属性来讲,干的都是一回事.消息队列的主要目的实现消息的生产者和消费者之间的解耦,支持多应用之间的异步协调工作 由于工作原因,接触和使用rabbitmq作为生产环境下的消息队列,因此准备写一些博文,记录下这个过程中的收货:而开篇除了环境搭建之外,就是对于其内部的基本概念进行熟悉和了解了. 基础环境搭建可以参考: <RabbitMq基础教程之安装与测试> 本文则主要集中在以下几点: 几个基本

转:RabbitMQ基础知识

RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多公开标准(如 COBAR的 IIOP ,或者是 SOAP 等),但是在异步消息处理中却不是这样,只有大企业有一些商业实现(如微软的 MSMQ ,IBM 的 Websphere MQ 等),因此,在 2006 年的 6 月,Cisco .Redhat.iMatix 等联合制

RabbitMQ,Apache的ActiveMQ,阿里RocketMQ,Kafka,ZeroMQ,MetaMQ,Redis也可实现消息队列,RabbitMQ的应用场景以及基本原理介绍,RabbitMQ基础知识详解,RabbitMQ布曙

消息队列及常见消息队列介绍 2017-10-10 09:35操作系统/客户端/人脸识别 一.消息队列(MQ)概述 消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以简单地描述为: 当不需要立即获得结果,但是并发量又需要进行控制的时候,差不多就是需要使用消息队列的时候. 消息队列主要解决了应用耦合.异步处理.流量削锋等问题. 当前使用较多的消息队列有RabbitMQ.RocketMQ.ActiveMQ.Kafka.ZeroMQ.MetaMq等,而部分数据库如Re

RabbitMQ基础教程之基本使用篇

RabbitMQ基础教程之基本使用篇 最近因为工作原因使用到RabbitMQ,之前也接触过其他的mq消息中间件,从实际使用感觉来看,却不太一样,正好趁着周末,可以好好看一下RabbitMQ的相关知识点:希望可以通过一些学习,可以搞清楚以下几点 基础环境搭建 可以怎么使用 实现原理是怎样的 实际工程中的使用(比如结合SpringBoot可以怎么玩) 相关博文,欢迎查看: <RabbitMq基础教程之安装与测试> <RabbitMq基础教程之基本概念> I. 前提准备 在开始之前,先得

RabbitMQ基础组件和SpringBoot整合RabbitMQ简单示例

交换器(Exchange) 交换器就像路由器,我们先是把消息发到交换器,然后交换器再根据绑定键(binding key)和生产者发送消息时的路由键routingKey, 按照交换类型Exchange Type(fanout,direct,topic)把消息投递到对应的队列.(明白这个概念很重要,后面的代码里面充分体现了这一点). RabbitMQ基础知识可查看消息队列RabbitMQ基础知识详解 队列(Queue) 存放消息的队列. 绑定(Binding) 交换器怎么知道把这条消息投递到哪个队列