RabbitMQ基本知识介绍

合集下载

rabbitmq知识点

rabbitmq知识点

rabbitmq知识点
RabbitMQ是一种开源的消息代理软件,用于在应用程序之间传递消息。

RabbitMQ是一种可靠、可扩展、易于部署的消息系统,可以用于处理高容量的数据流,并支持多种协议。

以下是关于RabbitMQ 的一些知识点:
1. RabbitMQ的工作原理
RabbitMQ使用AMQP(高级消息队列协议)来进行消息传递。

它包含一个消息发布者、一个消息代理(RabbitMQ服务器)和一个或多个消息消费者。

发布者将消息发送到消息代理,代理将消息存储在一个队列中,等待消费者来消费它。

2. RabbitMQ的应用场景
RabbitMQ在异步通信场景中应用广泛,如:分布式系统、微服务架构、多语言环境、消息队列和任务队列等场景。

3. RabbitMQ的重要概念
RabbitMQ中的重要概念包括:消息、生产者、消费者、交换机、队列、绑定、路由键等。

4. RabbitMQ的可靠性保证
RabbitMQ具有可靠性保证,可以通过消息的确认、持久化等机制来确保消息不会丢失或重复消费。

5. RabbitMQ的高可用性
RabbitMQ支持集群部署,可以实现高可用性和负载均衡,提高系统的稳定性和可用性。

6. RabbitMQ的性能优化
在使用RabbitMQ时需要注意性能优化,如:使用消息压缩、消息批量发送、消息预取等措施来提高RabbitMQ的性能。

7. RabbitMQ的安全性
RabbitMQ支持SSL和TLS等安全机制,可以确保消息传递的安全性和可靠性。

以上是关于RabbitMQ的一些知识点,希望对大家有所帮助。

rabbitmq 知识点总结

rabbitmq 知识点总结

rabbitmq 知识点总结RabbitMQ 知识点总结RabbitMQ 是一个开源的消息中间件,用于在应用程序之间传递消息。

它实现了AMQP(高级消息队列协议)标准,并支持多种编程语言。

本文将从几个方面总结 RabbitMQ 的相关知识点。

一、什么是 RabbitMQ?RabbitMQ 是一个基于AMQP 协议的消息中间件,它可以在分布式环境下进行可靠的消息传递。

它采用生产者-消费者模型,生产者将消息发送到队列中,消费者从队列中取出消息并进行处理。

RabbitMQ 的核心概念包括生产者、消费者、队列、交换机和绑定。

二、消息传递模型RabbitMQ 提供了多种消息传递模型,包括点对点模型和发布/订阅模型。

在点对点模型中,消息发送到队列,只有一个消费者能够接收到消息;在发布/订阅模型中,消息发送到交换机,多个消费者可以同时订阅这个交换机,并接收到相应的消息。

三、交换机和队列交换机是消息的分发中心,生产者将消息发送到交换机,然后交换机根据规则将消息路由到队列。

交换机有四种类型:直连交换机、主题交换机、扇形交换机和头交换机,不同的交换机类型使用不同的路由规则。

队列是存储消息的容器,消费者从队列中获取消息并进行处理。

四、消息确认机制消息确认机制是 RabbitMQ 提供的一种保证消息可靠性的机制。

生产者在发送消息之后,可以选择等待消息被消费者确认后再发送下一条消息,这样可以保证消息不会丢失。

消息确认机制包括生产者确认和消费者确认两种方式。

五、消息持久化RabbitMQ 提供了消息持久化功能,可以将消息存储到磁盘上,即使在 RabbitMQ 服务器宕机后,消息也不会丢失。

消息持久化需要同时设置队列和消息的持久化属性。

六、消息优先级RabbitMQ 允许为消息设置优先级,优先级高的消息会被优先处理。

可以通过设置消息的优先级属性来实现消息优先级。

七、消息过期机制RabbitMQ 支持消息的过期时间设置,可以设置消息在一定时间后过期并自动从队列中删除。

rabbitmq 知识点总结

rabbitmq 知识点总结

rabbitmq 知识点总结RabbitMQ 知识点总结RabbitMQ 是一个开源的消息中间件,它实现了高级消息队列协议(AMQP),主要用于应用程序之间的异步消息传递。

本文将对RabbitMQ 的相关知识点进行总结,包括基本概念、主要特性、使用场景以及与其他消息队列系统的比较等。

一、基本概念1. 消息队列:消息队列是一种存储消息的容器,应用程序可以通过消息队列进行异步通信,发送方将消息放入队列,接收方从队列中获取消息进行处理。

2. 生产者:生产者是消息的发送方,将消息发送到队列中。

3. 消费者:消费者是消息的接收方,从队列中获取消息并进行处理。

4. 队列:队列是消息的存储空间,消息按照先进先出(FIFO)的顺序进行存储和处理。

二、主要特性1. 可靠性:RabbitMQ 提供了多种机制来保证消息的可靠性,如消息持久化、消息确认机制等。

2. 灵活的路由:RabbitMQ 支持多种路由方式,如直连路由、主题路由、扇型路由等,可以根据需求灵活地进行消息路由。

3. 高并发:RabbitMQ 采用多线程模型,可以支持高并发的消息处理。

4. 可扩展性:RabbitMQ 支持集群部署,可以通过增加节点来实现系统的水平扩展。

5. 消息确认机制:RabbitMQ 提供了消息确认机制,可以确保消息被消费者正确接收,避免消息丢失或重复消费的问题。

三、使用场景1. 异步任务处理:将耗时的任务放入消息队列中,由消费者异步处理,提高系统的并发能力。

2. 应用解耦:通过消息队列实现应用之间的解耦,提高系统的可维护性和可扩展性。

3. 流量削峰:当系统并发请求过多时,可以将请求放入消息队列中,由消费者按照系统处理能力进行消费,避免系统崩溃或响应变慢。

4. 日志收集:将系统日志通过消息队列发送到日志处理系统,实现日志的集中存储和分析。

5. 分布式系统:在分布式系统中,可以使用 RabbitMQ 进行消息传递和协调。

四、与其他消息队列系统的比较1. ActiveMQ:RabbitMQ 相对于 ActiveMQ 来说,性能更高、可靠性更好,而且支持更多的特性和协议。

rabbitmq知识点总结

rabbitmq知识点总结

rabbitmq知识点总结RabbitMQ是一种开源的消息代理中间件,用于在分布式系统中进行消息队列的处理。

它基于AMQP(高级消息队列协议)实现,并且支持广泛的编程语言和平台。

下面是RabbitMQ的一些重要的知识点总结:1.消息队列:-一种基于AMQP协议的消息中间件,用于在应用程序之间传递消息。

-它可以解耦应用程序的耦合,并提供异步处理和可伸缩性。

- RabbitMQ使用消息队列来存储消息,并且保证按照先入先出的顺序进行处理。

2.生产者和消费者:-生产者是发送消息的应用程序。

-消费者是接收并处理消息的应用程序。

- RabbitMQ提供了一个可靠的机制来确保消息传递给消费者,并处理消费者的反馈。

3.队列:- RabbitMQ使用队列来存储消息。

-队列是一个具有特定名称的消息容器,消息通过队列进行传递。

-消费者从队列中获取消息并进行处理。

4. 交换机(Exchange):- RabbitMQ使用交换机将消息发送到队列。

-交换机决定将消息发送到哪些队列。

- 有四种类型的交换机:直接(direct)、主题(topic)、扇出(fanout)和头部(headers)。

-不同类型的交换机根据不同的规则将消息发送到不同的队列。

5. 绑定(Binding):-绑定是将队列和交换机之间的关联关系建立起来的过程。

-绑定规则决定了消息将如何从交换机发送到队列。

6. 路由(Routing):-路由是确定消息应该被发送到哪个队列的过程。

- RabbitMQ使用路由键和绑定键来进行路由。

-路由键是生产者在发送消息时指定的参数,用于标识消息的类别。

-绑定键是决定将消息发送到哪个队列的规则。

7. 消费确认(Acknowledgement):- RabbitMQ提供了消息消费确认的机制。

- 消费者在处理完消息后发送确认消息给RabbitMQ。

- 如果消费者在处理消息时发生错误,RabbitMQ将重新将消息发送给其他消费者。

RabbitMQ介绍与PHP应用,及碰到问题解决

RabbitMQ介绍与PHP应用,及碰到问题解决

RabbitMQ介绍与PHP应⽤,及碰到问题解决⼀. RabbitMQ 简介MQ全称为Message Queue, 消息队列(MQ)是⼀种应⽤程序对应⽤程序的通信⽅法。

应⽤程序通过读写出⼊队列的消息(针对应⽤程序的数据)来通信,⽽⽆需专⽤连接来链接它们。

消息传递指的是程序之间通过在消息中发送数据进⾏通信,⽽不是通过直接调⽤彼此来通信,直接调⽤通常是⽤于诸如远程过程调⽤的技术。

排队指的是应⽤程序通过队列来通信。

队列的使⽤除去了接收和发送应⽤程序同时执⾏的要求。

RabbitMQ是使⽤Erlang语⾔开发的开源消息队列系统,基于AMQP协议来实现。

AMQP的主要特征是⾯向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。

AMQP协议更多⽤在企业系统内,对数据⼀致性、稳定性和可靠性要求很⾼的场景,对性能和吞吐量的要求还在其次。

⼆. RabbitMQ 使⽤场景1. 解耦(为⾯向服务的架构(SOA)提供基本的最终⼀致性实现)场景说明:⽤户下单后,订单系统需要通知库存系统。

传统的做法是,订单系统调⽤库存系统的接⼝。

传统模式的缺点:假如库存系统⽆法访问,则订单减库存将失败,从⽽导致订单失败订单系统与库存系统耦合引⼊消息队列订单系统:⽤户下单后,订单系统完成持久化处理,将消息写⼊消息队列,返回⽤户订单下单成功库存系统:订阅下单的消息,采⽤拉/推的⽅式,获取下单信息,库存系统根据下单信息,进⾏库存操作假如:在下单时库存系统不能正常使⽤。

也不影响正常下单,因为下单后,订单系统写⼊消息队列就不再关⼼其他的后续操作了。

实现订单系统与库存系统的应⽤解耦为了保证库存肯定有,可以将队列⼤⼩设置成库存数量,或者采⽤其他⽅式解决。

基于消息的模型,关⼼的是“通知”,⽽⾮“处理”。

短信、邮件通知、缓存刷新等操作使⽤消息队列进⾏通知。

消息队列和RPC的区别与⽐较:RPC: 异步调⽤,及时获得调⽤结果,具有强⼀致性结果,关⼼业务调⽤处理结果。

rabbitmq 大纲

rabbitmq 大纲

rabbitmq 大纲RabbitMQ概述简介RabbitMQ是一个开源的消息代理服务器,用于在软件应用程序之间可靠、高效地传递消息。

它是一个分布式系统,支持多种编程语言和协议,使其成为各种应用程序和微服务的理想选择。

核心概念RabbitMQ的中心概念包括:交换器:指定消息应被路由到的目标队列。

队列:存储消息的缓冲区,直到它们被消费者处理。

绑定:将交换器与队列关联,从而定义消息流。

消息:通过RabbitMQ传输的实际数据。

工作原理RabbitMQ通过以下步骤传输消息:1. 生产者将消息发布到交换器。

2. 交换器根据绑定的规则将消息路由到一个或多个队列。

3. 消费者从队列中读取消息并处理它们。

特点RabbitMQ具有以下特点:高可靠性:提供持久化和复制功能,以确保消息的安全性。

可扩展性:支持水平和垂直扩展,以满足不断增长的需求。

灵活的路由:支持多种路由模式,包括主题和头部匹配。

多协议:支持AMQP、MQTT和STOMP等协议。

丰富的工具和库:提供一系列工具和库,简化开发和管理。

用例RabbitMQ在以下场景中得到了广泛应用:微服务通信:在松散耦合的微服务之间可靠地传输消息。

异步任务处理:安排和处理长时间运行的任务,而不会阻塞应用程序。

事件流处理:实时处理大量事件数据,例如来自传感器或日志。

消息队列:提供可靠的消息存储和转发机制。

集成功能:集成来自不同来源的数据和应用程序。

优点使用RabbitMQ的优点包括:增加可靠性:通过持久化和复制防止数据丢失。

提高性能:并行处理消息,提高吞吐量。

提高可伸缩性:轻松扩展基础设施以满足需求增长。

降低复杂性:通过消息队列抽象隐藏应用程序之间的通信细节。

增强安全性:提供访问控制和加密功能来保护消息。

结论RabbitMQ是一个功能强大且可靠的消息代理服务器,为软件应用程序之间的消息传递提供了高效且可扩展的解决方案。

它广泛用于各种用例,从微服务通信到事件流处理,并凭借其灵活性、可扩展性和可靠性获得了广泛认可。

rabbitMQ教程(三)一篇文章看懂rabbitMQ

rabbitMQ教程(三)一篇文章看懂rabbitMQ

rabbitMQ教程(三)⼀篇⽂章看懂rabbitMQ⼀、rabbitMQ是什么: RabbitMQ,遵循AMQP协议,由内在⾼并发的erlanng语⾔开发,⽤在实时的对可靠性要求⽐较⾼的消息传递上。

学过websocket的来理解rabbitMQ应该是⾮常简单的了,websocket是基于服务器和页⾯之间的通信协议,⼀次握⼿,多次通信。

⽽rabbitMQ就像是服务器之间的socket,⼀个服务器连上MQ监听,⽽另⼀个服务器只要通过MQ发送消息就能被监听服务器所接收。

但是MQ和socket还是有区别的,socket相当于是页⾯直接监听服务器。

⽽MQ就是服务器之间的中转站,例如邮箱,⼀个⼈投递信件给邮箱,另⼀个⼈去邮箱取,他们中间没有直接的关系,所以耦合度相⽐socket⼩了很多。

上图是最简单的MQ关系,⽣产者-MQ队列-消费者⼆、MQ使⽤场景: 别啥固定式使⽤场景了,说的透彻⼀点,他就是服务器之间通信的,前⾯博⽂中提到的Httpclient也可以做到,但是这个相对于其他通信在中间做了⼀个中间仓库。

好处1:降低了两台服务器之间的耦合,哪怕是⼀台服务器挂了,另外⼀台服务器也不会报错或者休克,反正他监听的是MQ,只要服务器恢复再重新连上MQ发送消息,监听服务器就能再次接收。

好处2:MQ作为⼀个仓库,本⾝就提供了⾮常强⼤的功能,例如不再是简单的⼀对⼀功能,还能⼀对多,多对⼀,⾃⼰脑补保险箱场景,只要有特定的密码,谁都能存,谁都能取。

也就是说能实现群发消息和以此衍⽣的功能。

好处3:现在普遍化的持久化功能,当MQ挂掉可以存储在磁盘等下重启恢复。

(需要设置)三、专业术语介绍:1. ⽣产者:在现实⽣活中就好⽐制造商品的⼯⼚,他们是商品的⽣产者。

⽣产者只意味着发送。

发送消息的程序称之为⼀个⽣产者。

2. 队列:rabbitMQ就像⼀个仓库,⼀个仓库⾥⾯可以有很多队列,每个队列才是服务器之间消息通信的载体。

RabbitMQ最全介绍特别详细版本

RabbitMQ最全介绍特别详细版本

RabbitMQ最全介绍特别详细版本⼀、关于 RabbitMQ说到 RabbitMQ,相信⼤家都不会陌⽣,微服务开发中必不可少的中间件。

在上篇关于消息队列的⽂章中,我们了解到 RabbitMQ 本质其实是⽤ Erlang 开发的 AMQP(Advanced Message Queuing Protocol )的具体实现,最初起源于⾦融系统,主要⽤于在分布式系统中存储转发消息,在易⽤性、扩展性、⾼可⽤性等⽅⾯有着不俗的表现。

2010年4⽉,RabbitMQ 科技公司被 VMware 旗下的 SpringSource 收购,在 2013 年 5 ⽉被并⼊ Pivotal 。

其实 VMware,Pivotal 本质上是⼀家的。

不同的是,VMware 是独⽴上市⼦公司,⽽ Pivotal 是整合了EMC的某些资源,现在并没有上市。

其中我们现在使⽤的 Spring 系列框架,就是 Pivotal 公司热门的产品之⼀。

直到后来 Pivotal 将其开源,RabbitMQ 才逐渐⾛向⼤众!RabbitMQ 发展到今天,已经被越来越多的⼈认可,尤其是互联⽹公司,已经有着⼤规模的场景应⽤,今天我们就⼀起来深⼊了解⼀下RabbitMQ。

⼆、RabbitMQ 模型介绍2.1、内部结构分析上⾯我们有说到 RabbitMQ 本质是 AMQP 协议的⼀个开源实现,在详细介绍 RabbitMQ 之前,我们先来看⼀下 AMQP 的内部结构图!基本概念如下:Publisher:消息的⽣产者,也是⼀个向交换器发布消息的客户端应⽤程序Exchange:交换器,⽤来接收⽣产者发送的消息并将这些消息路由给服务器中的队列Binding:绑定,⽤于将消息队列和交换器之间建⽴关联。

⼀个绑定就是基于路由键将交换器和消息队列连接起来的路由规则,所以可以将它理解成⼀个由绑定构成的路由表。

Queue:消息队列,⽤来保存消息直到发送给消费者Connection:⽹络连接,⽐如⼀个 TCP 连接Channel:信道,多路复⽤连接中的⼀条独⽴的双向数据流通道Consumer:消息的消费者,表⽰⼀个从消息队列中取得消息的客户端应⽤程序Virtual Host:虚拟主机,表⽰⼀批交换器、消息队列和相关对象。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

RabbitMQ基础概念详细介绍引言你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相互调用、通讯的问题而苦恼、挣扎?如果是,那么恭喜你,消息服务让你可以很轻松地解决这些问题。

消息服务擅长于解决多系统、异构系统间的数据交换(消息通知/通讯)问题,你也可以把它用于系统间服务的相互调用(RPC)。

本文将要介绍的RabbitMQ就是当前最主流的消息中间件之一。

RabbitMQ简介AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。

消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。

AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。

RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。

用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

下面将重点介绍RabbitMQ中的一些基础概念,了解了这些概念,是使用好RabbitMQ的基础。

ConnectionFactory、Connection、ChannelConnectionFactory、Connection、Channel都是RabbitMQ对外提供的API中最基本的对象。

Connection是RabbitMQ的socket链接,它封装了socket协议相关部分逻辑。

ConnectionFactory为Connection的制造工厂。

Channel是我们与RabbitMQ打交道的最重要的一个接口,我们大部分的业务操作是在Channel这个接口中完成的,包括定义Queue、定义Exchange、绑定Queue与Exchange、发布消息等。

QueueQueue(队列)是RabbitMQ的内部对象,用于存储消息,用下图表示。

RabbitMQ中的消息都只能存储在Queue中,生产者(下图中的P)生产消息并最终投递到Queue中,消费者(下图中的C)可以从Queue中获取消息并消费。

多个消费者可以订阅同一个Queue,这时Queue中的消息会被平均分摊给多个消费者进行处理,而不是每个消费者都收到所有的消息并处理。

Message acknowledgment在实际应用中,可能会发生消费者收到Queue中的消息,但没有处理完成就宕机(或出现其他意外)的情况,这种情况下就可能会导致消息丢失。

为了避免这种情况发生,我们可以要求消费者在消费完消息后发送一个回执给RabbitMQ,RabbitMQ收到消息回执(Message acknowledgment)后才将该消息从Queue中移除;如果RabbitMQ没有收到回执并检测到消费者的RabbitMQ连接断开,则RabbitMQ会将该消息发送给其他消费者(如果存在多个消费者)进行处理。

这里不存在timeout概念,一个消费者处理消息时间再长也不会导致该消息被发送给其他消费者,除非它的RabbitMQ连接断开。

这里会产生另外一个问题,如果我们的开发人员在处理完业务逻辑后,忘记发送回执给RabbitMQ,这将会导致严重的bug——Queue中堆积的消息会越来越多;消费者重启后会重复消费这些消息并重复执行业务逻辑…Message durability如果我们希望即使在RabbitMQ服务重启的情况下,也不会丢失消息,我们可以将Queue与Message都设置为可持久化的(durable),这样可以保证绝大部分情况下我们的RabbitMQ 消息不会丢失。

但依然解决不了小概率丢失事件的发生(比如RabbitMQ服务器已经接收到生产者的消息,但还没来得及持久化该消息时RabbitMQ服务器就断电了),如果我们需要对这种小概率事件也要管理起来,那么我们要用到事务。

由于这里仅为RabbitMQ的简单介绍,所以这里将不讲解RabbitMQ相关的事务。

Prefetch count前面我们讲到如果有多个消费者同时订阅同一个Queue中的消息,Queue中的消息会被平摊给多个消费者。

这时如果每个消息的处理时间不同,就有可能会导致某些消费者一直在忙,而另外一些消费者很快就处理完手头工作并一直空闲的情况。

我们可以通过设置prefetchCount 来限制Queue每次发送给每个消费者的消息数,比如我们设置prefetchCount=1,则Queue每次给每个消费者发送一条消息;消费者处理完这条消息后Queue会再给该消费者发送一条消息。

Exchange在上一节我们看到生产者将消息投递到Queue中,实际上这在RabbitMQ中这种事情永远都不会发生。

实际的情况是,生产者将消息发送到Exchange(交换器,下图中的X),由Exchange将消息路由到一个或多个Queue中(或者丢弃)。

Exchange是按照什么逻辑将消息路由到Queue的?这个将在Binding一节介绍。

RabbitMQ中的Exchange有四种类型,不同的类型有着不同的路由策略,这将在Exchange Types一节介绍。

routing key生产者在将消息发送给Exchange的时候,一般会指定一个routing key,来指定这个消息的路由规则,而这个routing key需要与Exchange Type及binding key联合使用才能最终生效。

在Exchange Type与binding key固定的情况下(在正常使用时一般这些内容都是固定配置好的),我们的生产者就可以在发送消息给Exchange时,通过指定routing key来决定消息流向哪里。

RabbitMQ为routing key设定的长度限制为255 bytes。

BindingRabbitMQ中通过Binding将Exchange与Queue关联起来,这样RabbitMQ就知道如何正确地将消息路由到指定的Queue了。

Binding key在绑定(Binding)Exchange与Queue的同时,一般会指定一个binding key;消费者将消息发送给Exchange时,一般会指定一个routing key;当binding key与routing key 相匹配时,消息将会被路由到对应的Queue中。

这个将在Exchange Types章节会列举实际的例子加以说明。

在绑定多个Queue到同一个Exchange的时候,这些Binding允许使用相同的binding key。

binding key 并不是在所有情况下都生效,它依赖于Exchange Type,比如fanout类型的Exchange就会无视binding key,而是将消息路由到所有绑定到该Exchange的Queue。

Exchange TypesRabbitMQ常用的Exchange Type有fanout、direct、topic、headers这四种(AMQP规范里还提到两种Exchange Type,分别为system与自定义,这里不予以描述),下面分别进行介绍。

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

上图中,生产者(P)发送到Exchange(X)的所有消息都会路由到图中的两个Queue,并最终被两个消费者(C1与C2)消费。

directdirect类型的Exchange路由规则也很简单,它会把消息路由到那些binding key与routing key完全匹配的Queue中。

以上图的配置为例,我们以routingKey=”error”发送消息到Exchange,则消息会路由到Queue1(amqp.gen-S9b…,这是由RabbitMQ自动生成的Queue名称)和Queue2(amqp.gen-Agl…);如果我们以routingKey=”info”或routingKey=”warning”来发送消息,则消息只会路由到Queue2。

如果我们以其他routingKey发送消息,则消息不会路由到这两个Queue中。

topic前面讲到direct类型的Exchange路由规则是完全匹配binding key与routing key,但这种严格的匹配方式在很多情况下不能满足实际业务需求。

topic类型的Exchange在匹配规则上进行了扩展,它与direct类型的Exchage相似,也是将消息路由到binding key与routing key相匹配的Queue中,但这里的匹配规则有些不同,它约定:•routing key为一个句点号“. ”分隔的字符串(我们将被句点号“. ”分隔开的每一段独立的字符串称为一个单词),如“d.nyse”、“nyse.vmw”、“quick.orange.rabbit”•binding key与routing key一样也是句点号“. ”分隔的字符串•binding key中可以存在两种特殊字符“*”与“#”,用于做模糊匹配,其中“*”用于匹配一个单词,“#”用于匹配多个单词(可以是零个)以上图中的配置为例,routingKey=”quick.orange.rabbit”的消息会同时路由到Q1与Q2,routingKey=”lazy.orange.fox”的消息会路由到Q1,routingKey=”lazy.brown.fox”的消息会路由到Q2,routingKey=”lazy.pink.rabbit”的消息会路由到Q2(只会投递给Q2一次,虽然这个routingKey与Q2的两个bindingKey都匹配);routingKey=”quick.brown.fox”、routingKey=”orange”、routingKey=”quick.orange.male.rabbit”的消息将会被丢弃,因为它们没有匹配任何bindingKey。

headersheaders类型的Exchange不依赖于routing key与binding key的匹配规则来路由消息,而是根据发送的消息内容中的headers属性进行匹配。

在绑定Queue与Exchange时指定一组键值对;当消息发送到Exchange时,RabbitMQ会取到该消息的headers(也是一个键值对的形式),对比其中的键值对是否完全匹配Queue 与Exchange绑定时指定的键值对;如果完全匹配则消息会路由到该Queue,否则不会路由到该Queue。

相关文档
最新文档