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

RabbitMQ(1)核心概念

消息中间价消息中间价,也称消息队列,是分布式式系统中常用的中间价。通过消息中间价传递消息,使得各个子系统解耦,异步通信。目前业界有许多消息队列的实现,如RabbitMQ、Kafka、Activ

消息中间价

消息中间价,也称消息队列,是分布式式系统中常用的中间价。
通过消息中间价传递消息,使得各个子系统解耦,异步通信。
目前业界有许多消息队列的实现,如RabbitMQ、Kafka、ActiveMQ、ZeroMQ和RocketMQ等。

AMQP

AMQP(Advanced Message Queuing Protocal)是应用层的一个通信协议,面向消息中间价设计,定义了消息客户端和消息中间价之间的一种通信标准。
AMQP是应用层协议,传输层使用TCP。

RabbitMQ是AMQP的实现,采用Erlang实现。除了实现AMQP,RabbitMQ支持其他协议,如STOMP、MQTT。

RabbitMQ整体架构

架构与角色

  • Publisher: 消息发送方
  • Consumer: 消息消费方
  • Message: 一条消息
  • Broker:消息中间价服务节点
  • Exchange: 交换器。交换器有多种类型
  • Queue: 队列
  • Binding: 交换器和队列绑定
  • BindingKey: 交换器和队列绑定是使用的key。BindingKey与Exchange的类型以及消息的RoutingKey一起决定了消息到达Exchange之后,转发到哪些队列
  • RoutingKey: 路由健。发送方发送消息时,给消息带上一个路由健

消息转发过程

发送方发布一条带有RoutingKey的消息到Exchange,Exchange根据消息的RoutingKey和Exchange的类型以及Exchange和Queue之间的BindingKey,将消息发送到与之绑定的若干个队列中,消费从订阅的队列中获取到消息进行消费。

Exchange,Queue,Binding

从上面的消息转发过程可以看出,Exchange,Queue和Binding在消息转发过程中扮演核心角色。当带有RoutingKey当消息被投递到一个Exchange后,后续会路由
到哪个队列将由Exchange到类型、Exchange绑定到Queue以及绑定时到BindingKey所决定。

Queue

Queue到概念很好理解,及消息独立。Queue时RabbitMQ内用于消息存储到对象。生产者发送到消息将最终到达Queue,等待消费者消费。

Exchange、Binding

Exchange时RabbitMQ中消息到入口,生产者将消息发送到Exchange,由Exchange将消息在发送到Queue。
Exchange和Queue之间到关联通过Binding实现,在将Queue和Exchange绑定时,需要指定一个BindingKey、该BindingKey后续将配合Exchange到类型和消息
的RoutingKey来共同决定这条消息可以由Exchange发送到哪些队列。
同一组Exchange和Queue可以通过不同到BindingKey多次绑定。

Exchange类型

消息不是由生产者直接发送到Queue,然后由消费者消费的。这样到模型过于简单,应用场景很受限,只能满足类似点对点通信到场景。
为了满足丰富到应用场景,消息将将首先发送到Exchange,在由Exchange发送到Queue。这里面实现灵活到通信模型的关键在于RabbitMQ实现了多种不同类型到Exchange。
不同类型到Exchange,对消息定义了不同到路由策略。下面依次说明各个类型到Exchange。

  • fanout类型
    fanout类型到Exchange对消息采用广播策略:对于发送到该Exchange到消息,将被路由到所有与该Exchange绑定到队列,而忽略消息到RoutingKey

    如图所示,无论消息的routingkey为何值,bindingkey1和bindingkey2为何值消息都将被同时路由到Queue1和Queue2。

  • direct类型
    direct类型到Exchange,将消息路由到那些BingKey与消息到RoutingKey完全相同到队列中。

    如图所示,如果消息的RoutingKey为red,消息将被路由到Queue1;如果消息的RoutingKey为yellow,消息将被路由到Queue2。其他发送到该Exchange的消息都被丢弃。

  • topic类型
    与direct类型到Exchange不同,topic类型到Exchange采取来更加灵活到路由策略:它将消息路由到BindingKey与消息到RoutingKey相匹配到队列中。其中灵活性
    体现在匹配规则上。
    RoutingKey和BindingKey被定义为"."分割到字符串,如 "red.cat.big","yellow.pig.small"。分割出到每一单位我们称作单词,如"cat","pig"等。
    BindingKey中可以使用两种特殊到单词用于模糊匹配,其中""匹配任意一个单词,"#"匹配零或多个任意单词。如"red..big"匹配任意以单词"red"开头,以"big"
    结尾的三个单词的key("red.pig.big","red.mouse.big"...);"yellow.#"匹配任意以单词"yellow"开头到key("yellow","yellow.tiger.small.ku")。
    这样,Exchange与Queue绑定时使用带有模糊匹配到BindingKey,即可对消息实现灵活的路由。

    如图所示,如果消息可RoutingKey为red.pig.big,red.mouse.big等,消息将被路由到Queue1;如果消息的RoutingKey为yellow,yellow.tiger.small.ku等,消息将被路由到Queue2。Exchange和Queue可以有多个绑定,如果消息的RoutingKey为all,它也会被路由到Queue2。

  • header类型
    header类型到Exchange路由规则比较特殊,它不依赖消息到RoutingKey来路由消息,而是根据消息内容中到header属性来路由。绑定Exchange和Queue时,指定
    一组header属性,发送消息时为消息设置一组header属性,当消息到达Exchange时,将被路由的header属性匹配到队列中。该类型到Exchange性能会比较差,实际
    应用中也很少见。

以上即是Exchange、Queue、Binding、BindingKey和RoutingKey直接到协作关系,也是RabbitMQ消息路由到核心原理。


推荐阅读
  • 第二章:Kafka基础入门与核心概念解析
    本章节主要介绍了Kafka的基本概念及其核心特性。Kafka是一种分布式消息发布和订阅系统,以其卓越的性能和高吞吐量而著称。最初,Kafka被设计用于LinkedIn的活动流和运营数据处理,旨在高效地管理和传输大规模的数据流。这些数据主要包括用户活动记录、系统日志和其他实时信息。通过深入解析Kafka的设计原理和应用场景,读者将能够更好地理解其在现代大数据架构中的重要地位。 ... [详细]
  • 修复一个 Bug 竟耗时两天?真的有那么复杂吗?
    修复一个 Bug 竟然耗费了两天时间?这背后究竟隐藏着怎样的复杂性?本文将深入探讨这个看似简单的 Bug 为何会如此棘手,从代码层面剖析问题根源,并分享解决过程中遇到的技术挑战和心得。 ... [详细]
  • 本文提供了 RabbitMQ 3.7 的快速上手指南,详细介绍了环境搭建、生产者和消费者的配置与使用。通过官方教程的指引,读者可以轻松完成初步测试和实践,快速掌握 RabbitMQ 的核心功能和基本操作。 ... [详细]
  • ZeroMQ在云计算环境下的高效消息传递库第四章学习心得
    本章节深入探讨了ZeroMQ在云计算环境中的高效消息传递机制,涵盖客户端请求-响应模式、最近最少使用(LRU)队列、心跳检测、面向服务的队列、基于磁盘的离线队列以及主从备份服务等关键技术。此外,还介绍了无中间件的请求-响应架构,强调了这些技术在提升系统性能和可靠性方面的应用价值。个人理解方面,ZeroMQ通过这些机制有效解决了分布式系统中常见的通信延迟和数据一致性问题。 ... [详细]
  • 从单机存储进化为接口和存储的分离概述接口服务层对外提供REST服务,数据服务层提供数据存储功能。两者之间通过消息队列进行通信,数据服务层的所有数据服 ... [详细]
  • 背景最近面试面得心力交瘁,由于没有高并发架构的实际项目经验,经常是在场景设计的面试题目上面栽跟头。上次就被问到了关于秒杀系统的设计,竟无 ... [详细]
  • 一文了解消息中间件RabbitMQ
    消息中间件---RabbitMQ1消息中间件的作用2.常用的消息中间件3消息中间件RabbitMQ3.1RabbitMQ介绍3.3RabbitMQ的队列模式3.3RabbitMQ的 ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
  • 在当今的软件开发领域,分布式技术已成为程序员不可或缺的核心技能之一,尤其在面试中更是考察的重点。无论是小微企业还是大型企业,掌握分布式技术对于提升工作效率和解决实际问题都至关重要。本周的Java架构师实战训练营中,我们深入探讨了Kafka这一高效的分布式消息系统,它不仅支持发布订阅模式,还能在高并发场景下保持高性能和高可靠性。通过实际案例和代码演练,学员们对Kafka的应用有了更加深刻的理解。 ... [详细]
  • 深入解析Spring Boot启动过程中Netty异步架构的工作原理与应用
    深入解析Spring Boot启动过程中Netty异步架构的工作原理与应用 ... [详细]
  • 本文推荐了六款高效的Java Web应用开发工具,并详细介绍了它们的实用功能。其中,分布式敏捷开发系统架构“zheng”项目,基于Spring、Spring MVC和MyBatis技术栈,提供了完整的分布式敏捷开发解决方案,支持快速构建高性能的企业级应用。此外,该工具还集成了多种中间件和服务,进一步提升了开发效率和系统的可维护性。 ... [详细]
  • 掌握PHP框架开发与应用的核心知识点:构建高效PHP框架所需的技术与能力综述
    掌握PHP框架开发与应用的核心知识点对于构建高效PHP框架至关重要。本文综述了开发PHP框架所需的关键技术和能力,包括但不限于对PHP语言的深入理解、设计模式的应用、数据库操作、安全性措施以及性能优化等方面。对于初学者而言,熟悉主流框架如Laravel、Symfony等的实际应用场景,有助于更好地理解和掌握自定义框架开发的精髓。 ... [详细]
  • 优化后的标题:PHP分布式高并发秒杀系统设计与实现
    PHPSeckill是一个基于PHP、Lua和Redis构建的高效分布式秒杀系统。该项目利用php_apcu扩展优化性能,实现了高并发环境下的秒杀功能。系统设计充分考虑了分布式架构的可扩展性和稳定性,适用于大规模用户同时访问的场景。项目代码已开源,可在Gitee平台上获取。 ... [详细]
  • ActiveMQ是由Apache开发的一款广受欢迎且功能强大的开源消息中间件。作为完全符合JMS 1.1和J2EE 1.4规范的JMS Provider实现,尽管JMS规范已问世多年,但ActiveMQ依然保持了其在消息队列领域的领先地位。本文将带你初步了解ActiveMQ的核心概念及其应用场景,帮助你快速入门这一重要的消息传递技术。 ... [详细]
author-avatar
mobiledu2502884897
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有