`

RabbitMQ的一些理解和笔记

阅读更多

    在这篇博客中,简单记录一下 rabbitmq 服务器中一些基本的概念。

 

Connection: connection 为 TCP连接,是我们的应用程序和RabbitMQ服务器真正发送和接收数据的地方。

Channel: channel为connection创建的“信道”,具体的AMQP命令都是通过信道发送出去的。每一条信道都有一个唯一的id,channel是线程不安全的。

bindingKey和routingKey的区分:

    bindingkey: 在使用绑定的时候,需要用到的路由键是 bindingkey。涉及到的客户端方法: channel.exchangeBind channel.queueBind等

    routingkey: 在发送消息的时候,需要用到的路由键是 routingkey。涉及到的客户端方法: channel.basicPublish

exchange:交换器,存在四种类型

  1. fanout:fanout类型的Exchange路由规则非常简单,它会把所有发送到该Exchage的消息路由到所有与它绑定的Queue中。

     
  2. direct:direct类型的Exchange路由规则也是非常简单,它会把消息路由到哪些 binding key routing key 完全匹配的Queue中。

         每个队列在新建时,默认会绑定到  默认交换器(名字为空字符串),绑定的路由键名称和路由键名称一致。
  3. topic: 根据 routingKey 和 bindingKey 进行匹配。bindingKey
     
  4. headers:此种交换器不常用,它是使用headers来匹配的,不依赖routingKey和bindingKey可以存在两种特殊字符*#用于做模糊匹配,其中 “*” 用于匹配一个单词,“#”用于匹配多个参数(可以是零个)。注意:“*” 以 . 作为分隔符 、  “#” 以任何字符作为匹配关键字的部分。

vhost:虚拟主机

    每一个 vhost 本质上就是一个 mini 版的 RabbitMQ 服务器,它拥有自己的队列、交换器、绑定等,同时它也有自己的权限控制。它提供了逻辑上的隔离,保证了数据的安全性。

 

Connection和Channel有什么关系?

   我们知道操作系统创建和销毁一条tcp连接是非常消耗性能的,如果系统高峰期时,大量的创建和销毁TCP连接,这会造成大量的性能损耗,并且系统很有可能达到瓶颈,如果我们所有的线程都使用一条TCP连接,并且保证每个线程的私密性,那么就可以大大提高系统的性能,因此 Channel 就应运而生了。

   即:我们可以简单的理解,channel 就是一个虚拟的 connection,channel是通过connection创建得来的,channel是线程不安全的。

 

设置消息的过期时间:

    1、设置队列中消息的过期时间

          通过队列设置的过期时间,那么队列中的每条消息的过期时间都是一致的。

         在channel.queueDeclare 时,设置x-message-ttl 参数,这个参数的单位是毫秒

         ** 不进行设置,表示此消息永不过期

         ** 设置为0表示,除非此时可以将消息投递给消费者,否则该消息会被立即丢弃

    2、为单条消息设置过期时间

         在channel.basicPublish 方法中加入expiretion 的属性参数,单位是毫秒

    注意:

          1、如果同时设置了队列的过期时间和消息的过期时间,那么以过期时间小的为准

          2、对于第一种方法设置的过期时间,在消息过期时就会从队列中进行移除,对于第二种方法,即使消息过期也不会马上从队列中移除,因为每条消息的过期时间是在即将投递给消费者之前进行判断的。

 

消费者消费消息时与rabbitmq断开连接:

    如果消费者就收到一条消息,然后确认之前与RabbitMQ断开连接或从队列上取消订阅,RabbitMQ会认为这条消息没有进行分发,会重新分发给下一个消费者进行处理。

 

消费者忘记确认消息时RabbitMQ服务器的处理:

   如果应用程序有bug导致没有确认消息,那么RabbitMQ将不会给该消费者发送更多的消息了。这是因为RabbitMQ服务器认为该消费者没有准备好接受下一条消息。

 

如果消息要想从RabbitMQ崩溃中恢复,必须满足一下几点:

  1. 将消息的投递模式(delivery mode)设置成 2(持久
  2. 发送到持久化的交换器中
  3. 到达持久化的队列中

 生产者如果知道消息到达了RabbitMQ服务器上

1、使用事务模式。(不推荐,严重影响性能

2、使用 confirm 一步确认。(推荐

详细解释:http://huan1993.iteye.com/admin/blogs/2432156

 

 

 

 

  • 大小: 30 KB
  • 大小: 29 KB
  • 大小: 18.8 KB
分享到:
评论

相关推荐

    rabbitmq学习笔记和软件和插件

    在学习RabbitMQ时,理解Erlang的基本语法和并发模型对深入理解RabbitMQ的工作原理很有帮助。 **三、Socat工具** Socat是一个命令行工具,用于建立各种网络连接。在RabbitMQ中,它有时被用来创建TCP隧道,帮助调试...

    rabbitmq学习笔记.zip

    RabbitMQ是一个开源的消息...总的来说,这个“rabbitmq学习笔记.zip”文件应该为初学者提供了一个全面了解和掌握RabbitMQ的资源,从基础概念到实践操作,再到高级特性和最佳实践,帮助读者建立起对RabbitMQ的深入理解。

    rabbitMQ 学习笔记

    **正文** ...通过以上的学习,你应该对RabbitMQ有了基本的理解,并掌握了在Java中使用RabbitMQ的基本方法。然而,实际应用中,还需要根据具体业务场景灵活运用和调整策略,以充分发挥RabbitMQ的优势。

    rabbitmq笔记.txt

    rabbitmqg概念快速预览,整理了mq所包含的大部分概念,帮助快速理解掌握mq,比你看一整本书来的简单透彻。节省时间而放在写代码上。

    Rabbitmq安装笔记

    本篇RabbitMQ安装笔记详细记录了在Ubuntu环境中安装RabbitMQ的步骤,包括源地址的配置、公钥的添加、软件包的更新和安装、权限问题的解决方法以及分布式应用的简单说明。这个过程对希望在Linux环境下搭建消息代理...

    RabbitMq学习笔记1

    理解这些工作模式和交换器类型是有效利用RabbitMQ的关键,可以根据实际需求选择合适的模式来设计消息传递流程。 **总结** RabbitMQ的安装、用户管理和权限控制,以及各种工作模式和交换器类型是其核心知识点。正确...

    尚硅谷RabbitMQ pdf笔记(优质文档)

    最后,笔记可能会包含一些最佳实践和常见问题的解决方案,帮助开发者避免陷阱,优化RabbitMQ的使用,提升系统性能。通过学习这份【尚硅谷RabbitMQ pdf笔记】,读者可以全面理解RabbitMQ的工作原理,熟练掌握其使用...

    rabbitMQ配置笔记

    本文将深入探讨RabbitMQ的配置过程,帮助你更好地理解和应用这一强大的工具。 首先,我们需要安装RabbitMQ。在大多数Linux发行版中,可以通过包管理器来安装,例如在Ubuntu上: ```bash sudo apt-get update sudo ...

    rabbitmq笔记及面试要点

    【标题】:深入理解RabbitMQ及其面试关键点 【正文】: RabbitMQ作为一款广泛应用的消息...理解并掌握这些知识点,不仅可以加深对RabbitMQ的理解,也有助于在面试中展现出对分布式系统架构和消息中间件的深入认识。

    Rabbitmq笔记+入门教程+示例

    **总结**:通过上述步骤,我们不仅可以掌握 RabbitMQ 的基本使用方法,还能理解如何利用它来解决实际问题,比如商品数据的实时同步。这种方式不仅降低了系统间的耦合度,还提高了系统的可维护性和扩展性。

    RabbitMQ学习 笔记

    ### RabbitMQ 学习笔记知识点总结 #### 一、RabbitMQ 历史与背景 RabbitMQ 是一个基于 AMQP(高级消息队列协议)的开源消息中间件,由 Erlang 语言编写而成。AMQP 的出现填补了异步消息处理领域的标准化空白,特别...

    尚硅谷_消息中间件RabbitMQ_课件.rar

    【标题】"尚硅谷_消息中间件RabbitMQ_课件....通过学习这份"尚硅谷_消息中间件RabbitMQ_课件",Java开发者能够全面理解RabbitMQ的工作机制,并掌握如何在实际项目中运用这一强大的消息中间件,提升系统的稳定性和效率。

    RabbitMQ.docx

    **RabbitMQ基础概念** RabbitMQ是一款开源的消息中间件,基于AMQP(Advanced Message Queuing Protocol)协议,用于在分布式系统中实现可靠的消息传递。...对于初学者,理解这些基本概念和模式是掌握RabbitMQ的关键。

    rabbitmq笔记整理

    这个“rabbitmq笔记整理”涵盖了关于RabbitMQ的基础概念、核心功能以及实际应用的关键点,旨在帮助读者深入理解并熟练掌握这一强大的中间件。 首先,我们要了解RabbitMQ的基本工作原理。RabbitMQ通过消息队列来实现...

    rabbitmq读书笔记

    总结:RabbitMQ作为一个强大的消息中间件,提供了丰富的功能和灵活性,通过理解其核心概念和机制,可以有效地实现系统的解耦、异步处理和容错能力。Python作为常用的开发语言,结合pika库,可以方便地实现RabbitMQ的...

    RabbitMQ-笔记

    **RabbitMQ详解** RabbitMQ是一个开源的消息队列系统,它是基于AMQP(Advanced Message Queuing Protocol)协议实现的,被广泛应用...通过理解其核心概念和工作流程,我们可以更有效地利用它来解决实际开发中的问题。

    rabbitmq.zip

    【描述】:这个压缩包的内容主要聚焦在RabbitMQ的学习和实践上,作者不仅提供了RabbitMQ的详细总结,还对比了其他消息中间件,这有助于读者更全面地理解和选择适合自己的消息队列解决方案。同时,提供的安装包方便...

    RabbitMQ.zip

    在这个名为“RabbitMQ”的学习笔记中,我们将深入探讨RabbitMQ的核心概念、安装配置、工作原理以及如何在实际开发中应用它。 一、RabbitMQ核心概念 1. **消息(Message)**:消息是RabbitMQ中传输的基本单元,它由...

    尚医通学习笔记,尚医通学习笔记

    《尚医通学习笔记》是针对尚医通平台的学习资料,涵盖了使用Java和SpringCloud进行系统开发的相关知识。本文将详细解析这些知识点,帮助读者深入理解如何在医疗信息化领域运用这些技术。 首先,我们来了解一下Java...

    操作RabbitMQ服务的Java业务代码

    这个`init-demo`项目很可能包含了这些基本组件的示例代码和详细的笔记,帮助开发者更好地理解和实践RabbitMQ与SpringBoot的集成。在实际开发中,你可以根据需求扩展这些基础结构,例如处理批量消息、设置消息确认...

Global site tag (gtag.js) - Google Analytics