`

Rabbit MQ基本原理

 
阅读更多

1. 系统架构

 几个概念说明: 

Broker:它提供一种传输服务,它的角色就是维护一条从生产者到消费者的路线,保证数据能按照指定的方式进行传输, 
Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。 
Queue:消息的载体,每个消息都会被投到一个或多个队列。 
Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来. 
Routing Key:路由关键字,exchange根据这个关键字进行消息投递。 
vhost:虚拟主机,一个broker里可以有多个vhost,用作不同用户的权限分离。 
Producer:消息生产者,就是投递消息的程序. 
Consumer:消息消费者,就是接受消息的程序. 
Channel:消息通道,在客户端的每个连接里,可建立多个channel.

 

2. 任务分发机制

Round-robin dispathching循环分发

RabbbitMQ的分发机制非常适合扩展,而且它是专门为并发程序设计的,如果现在load加重,那么只需要创建更多的Consumer来进行任务处理。

Message acknowledgment消息确认

为了保证数据不被丢失,RabbitMQ支持消息确认机制,为了保证数据能被正确处理而不仅仅是被Consumer收到,那么我们不能采用no-ack,而应该是在处理完数据之后发送ack. 
在处理完数据之后发送ack,就是告诉RabbitMQ数据已经被接收,处理完成,RabbitMQ可以安全的删除它了. 
如果Consumer退出了但是没有发送ack,那么RabbitMQ就会把这个Message发送到下一个Consumer,这样就保证在Consumer异常退出情况下数据也不会丢失. 
RabbitMQ它没有用到超时机制.RabbitMQ仅仅通过Consumer的连接中断来确认该Message并没有正确处理,也就是说RabbitMQ给了Consumer足够长的时间做数据处理。 
如果忘记ack,那么当Consumer退出时,Mesage会重新分发,然后RabbitMQ会占用越来越多的内存.

 

3. Message durability消息持久化

要持久化队列queue的持久化需要在声明时指定durable=True; 
这里要注意,队列的名字一定要是Broker中不存在的,不然不能改变此队列的任何属性. 
队列和交换机有一个创建时候指定的标志durable,durable的唯一含义就是具有这个标志的队列和交换机会在重启之后重新建立,它不表示说在队列中的消息会在重启后恢复 
消息持久化包括3部分 
1. exchange持久化,在声明时指定durable => true 

hannel.ExchangeDeclare(ExchangeName, "direct", durable: true, autoDelete: false, arguments: null);//声明消息队列,且为可持久化的
 2.queue持久化,在声明时指定durable => true 
channel.QueueDeclare(QueueName, durable: true, exclusive: false, autoDelete: false, arguments: null);//声明消息队列,且为可持久化的
 3.消息持久化,在投递时指定delivery_mode => 2(1是非持久化).
channel.basicPublish("", queueName, MessageProperties.PERSISTENT_TEXT_PLAIN, msg.getBytes());  
 如果exchange和queue都是持久化的,那么它们之间的binding也是持久化的,如果exchange和queue两者之间有一个持久化,一个非持久化,则不允许建立绑定. 

注意:一旦创建了队列和交换机,就不能修改其标志了,例如,创建了一个non-durable的队列,然后想把它改变成durable的,唯一的办法就是删除这个队列然后重现创建。

 

  • 大小: 85.5 KB
分享到:
评论

相关推荐

    rabbitmq 消息队列

    首先,我们要理解RabbitMQ的基本工作原理。RabbitMQ基于AMQP(Advanced Message Queuing Protocol)协议,这是一个开放标准,定义了消息的格式以及生产者、消费者和消息队列之间的交互方式。在RabbitMQ中,有以下几...

    RabbitMQ实战视频.zip

    理解队列的工作原理,如FIFO(先进先出)原则,以及如何通过队列来解耦系统组件。 2. **RabbitMQ核心概念**:学习RabbitMQ的关键组件,如节点、交换机、队列和绑定。理解节点的角色,交换机如何路由消息到相应的...

    Windows c++中RabbitMQ-c特殊消息队列的保姆教程(csdn)————程序.pdf

    在Windows环境下,使用C++与RabbitMQ进行通信,我们需要首先了解RabbitMQ的基本概念,它是一个开源的消息代理和队列服务器,常用于处理异步任务和分布式系统中的消息传递。RabbitMQ-c是一个C语言编写的轻量级...

    RebbitMQ Hello World(maven项目+RebbitMQ jar包+RabbitMQ安装文件)

    **RebbitMQ简介** ...通过这个项目,你可以学习到如何配置Maven依赖,理解RabbitMQ的基本组件和工作原理,以及编写发送和接收消息的代码。这将有助于你构建更复杂的分布式系统,利用RabbitMQ实现高效的消息传递。

    rabbitmq调试工具

    为了充分利用MQGhost_dev,用户应熟悉RabbitMQ的基本原理和配置,了解AMQP协议的基础知识,以及如何通过命令行或API与RabbitMQ进行交互。同时,了解如何解读工具提供的各种指标和日志,将有助于更精准地定位问题,...

    Rabbit3 £100 start Zero to Hero Updated - MetaTrader 4EA.zip

    首先,他们需要了解MQL4的基本语法和结构,以便阅读和分析RabbitM3.mq4代码。其次,他们需要理解EA中的各种交易参数,如止损、止盈、交易量等,以及如何根据市场情况调整这些参数。最后,模拟账户或回测工具可以帮助...

    MQ学习文档 方便回顾!

    ### MQ学习文档知识点详解 #### 一、MQ概念与特性 **1.1 同步与异步通讯** ...通过这一系列步骤,我们不仅可以了解RabbitMQ的基本操作,还能进一步深入理解消息队列的工作原理以及其在实际应用中的价值。

    SpringBoot使用Rabbit详解含完整代码

    通过本文的学习,我们了解了如何在 Spring Boot 应用程序中集成 RabbitMQ 作为消息队列,包括基本配置、消息发送和接收,以及一些高级特性。这些知识将有助于开发者在实际项目中更高效地使用 RabbitMQ 进行消息传递...

    03-05-24-RabbitMQ工作模型与Java编程1

    【RabbitMQ工作模型与Java编程1】课程旨在介绍MQ(消息队列)的基本概念,特别是专注于RabbitMQ的特性和使用方式。课程适合初学者或对RabbitMQ工作原理和高级特性理解不足的同学。 首先,让我们深入理解MQ的诞生...

    RabbitMq实例

    首先,我们要理解RabbitMQ的基本工作原理。RabbitMQ作为一个消息中间件,它的核心功能是接收并存储来自生产者的消息,然后在适当的时候将这些消息转发给消费者。生产者是发送消息的应用,而消费者则是接收并处理这些...

    RabbitMQ_3.8.2--ErLang_otp_win64_22.2.zip

    **RabbitMQ 3.8.2 和 Erlang OTP Win64 22.2 安装指南** RabbitMQ 是一个广泛使用的开源消息代理和队列服务器,...通过深入理解RabbitMQ的工作原理和使用方式,你可以有效地利用其特性来优化你的应用程序的通信流程。

    Fastadmin消息队列插件.zip

    消息队列是一种中间件,用于在不同的应用之间或者同一应用的不同组件之间传递消息,它的工作原理是生产者将任务或数据放入队列,然后消费者从队列中取出并处理这些任务。这种设计模式可以有效缓解高并发场景下的...

    分布式消息队列服务器:rabbitmq-server_3.7.14

    分布式消息队列服务器RabbitMQ,作为MQ(Message Queue)领域的杰出代表,是构建现代企业级应用程序的关键...通过理解RabbitMQ的基本概念和工作原理,以及正确安装和使用,我们可以充分发挥其在企业级应用中的潜力。

    RabbitMQ 原版书

    在第二章“Understanding messaging”中,作者深入探讨了消息传递的基本概念,包括消息队列、消息交换机、路由键等核心组件的工作原理。通过实例讲解,帮助读者理解如何设计和实现消息传递系统,以及如何优化消息...

    RabbitMQ客户端Qt工程文件

    4. **AMQP协议理解**:AMQP是RabbitMQ的核心协议,理解其工作原理有助于更好地利用QAMPQ库。AMQP定义了消息的格式、路由规则和错误处理策略。 5. **工程结构**:工程中可能包含`main.cpp`、`pro`文件、头文件和源...

    myrabbitmq.rar

    - **Message**: 在RabbitMQ中,消息是传递的基本单位,它由头和体两部分组成,其中体通常包含了应用需要传输的数据。 - **Exchange**: 交换器是RabbitMQ中的核心组件,它的主要职责是根据路由规则将消息分发到相应...

    RabbitMQ调研文档

    ### RabbitMQ核心概念与原理 #### 一、消息队列(Message Queue,MQ)概述 消息队列(MQ)作为一种应用程序间的通信方式,允许不同应用通过读写队列中的消息来实现非直接交互。这种方式避免了应用之间的直接耦合,...

    rabbitMq安装包

    【标题】:“rabbitMq安装包” ...通过这些知识点,我们可以理解RabbitMQ的基本概念、工作原理以及如何在Linux环境中进行安装和配置。确保正确安装和配置RabbitMQ,对于构建高效、可靠的分布式系统至关重要。

Global site tag (gtag.js) - Google Analytics