热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

rabbitmq多个消费者_RabbitMQ的几个基础概念【DaemonCoder】

Broker、生产者、消费者RabbitMQ作为消息中间件,最基本的功能就是接受生产者发来的消息,保存起来,并最终交给消费者。Rabbit
5d88a76549e68f15efa4c92fa111479a.png

Broker、生产者、消费者

RabbitMQ 作为消息中间件,最基本的功能就是接受生产者发来的消息,保存起来,并最终交给消费者。RabbitMQ 和 Redis 等其他常见的服务器程序类似,他也是一个服务器程序,接收发消息、保存消息、交付消息,生产者和消费者作为客户端程序连接服务器程序,生产者向服务器程序写消息数据,消息者则从服务器程序中读取消息数据。RabbitMQ 运行在服务器端的这部分程序,叫做 broker。

生产者发送消息命令 Basic.Publish

消费者读取消息命令 Basic.Consume Basic.Get

Queue:队列

队列是 RabbitMQ 的内部对象,用于存储消息。多个消费者可以订阅同一个队列,这时队列的消息会被分摊(Round-Robin,即轮询)给多个消费者,而不是每个消费者都收到所有的消息,RabbitMQ不支持队列层面的广播消费。

Exchange:交换器

生产者将消息发送到 Exchange,由交换器将消息路由到一个或者多个队列中,如果路由不到,返回给生产者或者直接丢弃。

RabbitMQ中交换器有四种类型:fanout、direct、topic、headers,下文会介绍这四种交换器的工作方式和区别。

RoutingKey:路由键

生产者将消息发给交换器的时候,一般会指定一个 RoutingKey,用来指定这个消息的路由规则,而这个 RoutingKey 需要与交换器类型和绑定键(BindingKey)联合使用才能生效。在交换器类型和绑定键固定的情况下,生产者可以通过指定 RoutingKey来决定消息发给哪个队列。

Binding:绑定

RabbitMQ 中通过指定绑定键(BindingKey)将交换器与队列关联起来。

生产者将消息发送给交换器的时候,需要一个 RoutingKey,当 BindingKey 和 RoutingKey 相匹配的时候,消息会被路由到对应的队列中。

四种交换器类型
  • fanout:会把消息路由到所有与此交换器绑定的队列中。
  • direct: 会把消息路由到 BindingKey 和 RoutingKey 完全匹配的队列中。
  • topic: 和 direct 类似,会把消息路由到 BindingKey 和 RoutingKey 相匹配的队列中,但是支持模糊匹配。约定 RoutingKey 和 BindingKey 都是以点(.)分隔的字符串,分隔开的每一段称为一个单词。通配符 * 可以匹配一个单词,# 可以匹配多个或0个单词。如:com.rabbitmq.client 可以匹配 *.rabbitmq.* 、*.*.client 和 com.#
  • headers: 这种类型不是根据路由键的匹配规则来路由的,而是根据发送消息内容中的 headers 属性进行匹配。headers 和绑定键完全匹配时才会路由到对应的队列。

Connection:连接

消息者或生产者与 RabbitMQ Broker 建立的TCP连接。

Channel:信道

信道是建立在连接之上的虚拟连接,多个信道可以复用 TCP 连接。每一个信道会有一个唯一的ID,RabbitMQ 处理的每条 AMQP 指令都是通过信道完成。



推荐阅读
  • 本文提供了 RabbitMQ 3.7 的快速上手指南,详细介绍了环境搭建、生产者和消费者的配置与使用。通过官方教程的指引,读者可以轻松完成初步测试和实践,快速掌握 RabbitMQ 的核心功能和基本操作。 ... [详细]
  • 本文详细介绍了HDFS的基础知识及其数据读写机制。首先,文章阐述了HDFS的架构,包括其核心组件及其角色和功能。特别地,对NameNode进行了深入解析,指出其主要负责在内存中存储元数据、目录结构以及文件块的映射关系,并通过持久化方案确保数据的可靠性和高可用性。此外,还探讨了DataNode的角色及其在数据存储和读取过程中的关键作用。 ... [详细]
  • 在《PHP应用性能优化实战指南:从理论到实践的全面解析》一文中,作者分享了一次实际的PHP应用优化经验。文章回顾了先前进行的一次优化项目,指出即使系统运行时间较长后出现的各种问题和性能瓶颈,通过采用一些通用的优化策略仍然能够有效解决。文中不仅详细阐述了优化的具体步骤和方法,还结合实例分析了优化前后的性能对比,为读者提供了宝贵的参考和借鉴。 ... [详细]
  • C#编程指南:实现列表与WPF数据网格的高效绑定方法 ... [详细]
  • 本文详细解析了 MySQL 5.7.20 版本中二进制日志(binlog)崩溃恢复机制的工作流程。假设使用 InnoDB 存储引擎,并且启用了 `sync_binlog=1` 配置,文章深入探讨了在系统崩溃后如何通过 binlog 进行数据恢复,确保数据的一致性和完整性。 ... [详细]
  • HTTP协议作为互联网通信的基础,其重要性不言而喻。相比JDK自带的URLConnection,HttpClient不仅提升了易用性和灵活性,还在性能、稳定性和安全性方面进行了显著优化。本文将深入解析HttpClient的使用方法与技巧,帮助开发者更好地掌握这一强大的工具。 ... [详细]
  • MongoDB Aggregates.group() 方法详解与编程实例 ... [详细]
  • MySQL:不仅仅是数据库那么简单
    MySQL不仅是一款高效、可靠的数据库管理系统,它还具备丰富的功能和扩展性,支持多种存储引擎,适用于各种应用场景。从简单的网站开发到复杂的企业级应用,MySQL都能提供强大的数据管理和优化能力,满足不同用户的需求。其开源特性也促进了社区的活跃发展,为技术进步提供了持续动力。 ... [详细]
  • 本文深入探讨了IO复用技术的原理与实现,重点分析了其在解决C10K问题中的关键作用。IO复用技术允许单个进程同时管理多个IO对象,如文件、套接字和管道等,通过系统调用如`select`、`poll`和`epoll`,高效地处理大量并发连接。文章详细介绍了这些技术的工作机制,并结合实际案例,展示了它们在高并发场景下的应用效果。 ... [详细]
  • 技术日志:深入探讨Spark Streaming与Spark SQL的融合应用
    技术日志:深入探讨Spark Streaming与Spark SQL的融合应用 ... [详细]
  • Java队列机制深度解析与应用指南
    Java队列机制在并发编程中扮演着重要角色。本文深入解析了Java队列的各种实现类及其应用场景,包括`LinkedList`、`ArrayBlockingQueue`和`PriorityQueue`等,并探讨了它们在高并发环境下的性能表现和适用场景。通过详细分析这些队列的内部机制和使用技巧,帮助开发者更好地理解和应用Java队列,提升系统的设计和架构能力。 ... [详细]
  • 在软件开发领域,“池”技术被广泛应用,如数据库连接池、线程池等。本文重点探讨Java中的线程池ThreadPoolExecutor,通过详细解析其内部机制,帮助开发者理解如何高效利用线程池管理任务执行。线程池不仅能够显著减少系统资源的消耗,提高响应速度,还能通过合理的配置,如饱和策略,确保在高负载情况下系统的稳定性和可靠性。文章还将结合实际案例,展示线程池在不同应用场景下的具体实现与优化技巧。 ... [详细]
  • 如何迅速识别并解决Gradle项目中的Jar包名称冲突问题?
    在处理Gradle项目时,经常会遇到Jar包名称冲突的问题。本文介绍了如何快速识别并解决此类冲突,特别是在使用fastjson的Feature.OrderedField功能时。通过添加特定参数,可以有效避免JSON字段乱序的情况,确保数据的一致性和可靠性。此外,文章还提供了详细的步骤和示例代码,帮助开发者高效地解决Jar包冲突问题。 ... [详细]
  • Go语言中Goroutine与通道机制及其异常处理深入解析
    在Go语言中,Goroutine可视为一种轻量级的并发执行单元,其资源消耗远低于传统线程,初始栈大小仅为2KB,而普通线程则通常需要几MB。此外,Goroutine的调度由Go运行时自动管理,能够高效地支持成千上万个并发任务。本文深入探讨了Goroutine的工作原理及其与通道(channel)的配合使用,特别是在异常处理方面的最佳实践,为开发者提供了一套完整的解决方案,以确保程序的稳定性和可靠性。 ... [详细]
  • 题目旨在解决树上的路径最优化问题,具体为在给定的树中寻找一条长度介于L到R之间的路径,使该路径上的边权平均值最大化。通过点分治策略,可以有效地处理此类问题。若无长度限制,可采用01分数规划模型,将所有边权减去一个常数m,从而简化计算过程。此外,利用单调队列优化动态规划过程,进一步提高算法效率。 ... [详细]
author-avatar
三生石512606
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有