`

RabbitMQ各种交换机类型Exchange Types介绍

阅读更多

最新版本的RabbitMQ有四种交换机类型,分别是Direct exchange、Fanout exchange、Topic exchange、Headers exchange。

 

Direct Exchange – 处理路由键。需要将一个队列绑定到交换机上,要求该消息与一个特定的路由键完全匹配。这是一个完整的匹配。如果一个队列绑定到该交换机上要求路由键 “dog”,则只有被标记为“dog”的消息才被转发,不会转发dog.puppy,也不会转发dog.guard,只会转发dog。 

 

 

Fanout Exchange – 不处理路由键。你只需要简单的将队列绑定到交换机上。一个发送到交换机的消息都会被转发到与该交换机绑定的所有队列上。很像子网广播,每台子网内的主机都获得了一份复制的消息。Fanout交换机转发消息是最快的。 

 

 

Topic Exchange – 将路由键和某模式进行匹配。此时队列需要绑定要一个模式上。符号“#”匹配一个或多个词,符号“*”匹配不多不少一个词。因此“audit.#”能够匹配到“audit.irs.corporate”,但是“audit.*” 只会匹配到“audit.irs”。我在RedHat的朋友做了一张不错的图,来表明topic交换机是如何工作的: 

 

注:这种情况下队列会收到所有路由器中符合topic规则的消息

 

Headers exchange – 还没有仔细研究过,复制点官方的介绍吧。

 

A headers exchange is designed to for routing on multiple attributes that are more easily expressed as message headers than a routing key. Headers exchanges ignore the routing key attribute. Instead, the attributes used for routing are taken from the headers attribute. A message is considered matching if the value of the header equals the value specified upon binding.

It is possible to bind a queue to a headers exchange using more than one header for matching. In this case, the broker needs one more piece of information from the application developer, namely, should it consider messages with any of the headers matching, or all of them? This is what the "x-match" binding argument is for. When the "x-match" argument is set to "any", just one matching header value is sufficient. Alternatively, setting "x-match" to "all" mandates that all the values must match.

Headers exchanges can be looked upon as "direct exchanges on steroids". Because they route based on header values, they can be used as direct exchanges where the routing key does not have to be a string; it could be an integer or a hash (dictionary) for example.

 

其实除了上面四种以外还有一种Default Exchange,它是一种特别的Direct Exchange。

当你手动创建一个队列时,后台会自动将这个队列绑定到一个名称为空的Direct类型交换机上,绑定路由名称与队列名称相同。有了这个默认的交换机和绑定,我们就可以像其他轻量级的队列,如Redis那样,直接操作队列来处理消息。不过只是看起来是,实际上在RabbitMQ里直接操作是不可能的。消息始终都是先发送到交换机,由交换级经过路由传送给队列,消费者再从队列中获取消息的。不过由于这个默认交换机和路由的关系,使我们只关心队列这一层即可,这个比较适合做一些简单的应用,毕竟没有发挥RabbitMQ的最大功能,如果都用这种方式去使用的话就真是杀鸡用宰牛刀了。

 

参考:

https://www.rabbitmq.com/tutorials/amqp-concepts.html

http://melin.iteye.com/blog/691265

分享到:
评论

相关推荐

    批量删除rabbitmq的队列或交换机

    采用python编写的批量删除rabbitmq的队列或交换机。 1.修改rabbitmq_delete.py中rabbitmq的配置; 2.执行以下命令: 删除队列: python3 rabbitmq_delete.py -k ‘udata.climb’ -d 1 删除交换机: python3 rabbitmq_...

    Jemter JMeter-Rabbit-AMQP插件升级版,支持rabbitmq交换机类型“x-consistent-hash”

    Jemter测试MQ的插件 JMeter-Rabbit-AMQP在github上17年便停止更新了,不支持rabbitmq的交换机类型“x-consistent-hash”,为此我更改了源码使其支持"x-consistent-hash

    springboot+RabbitMq交换器Direct的demo

    在Spring Boot中集成RabbitMQ,可以方便地管理和发送消息,而Direct交换器是RabbitMQ中的一种基本交换器类型,它按照路由键将消息精确地投递到指定的队列。 首先,我们需要在Spring Boot项目中添加RabbitMQ的相关...

    rabbitmq_delayed_message_exchange-20171215-3.6.x.ez.zip

    在这个场景中,我们关注的是“rabbitmq_delayed_message_exchange-20171215-3.6.x.ez.zip”这个压缩包,它包含了RabbitMQ的一个特定功能——延时消息交换机。 延时消息交换机是RabbitMQ的一个插件,允许我们设置...

    rabbitmq三种exchange

    在Java中使用RabbitMQ时,通常需要理解并掌握三种主要的Exchange类型:Direct、Fanout和Topic。这三种类型的Exchange各自有不同的路由策略,适应不同的应用场景。 1. **Direct Exchange(直接交换机)** Direct ...

    rabbitmq_delayed_message_exchange3.7

    延迟消息交换机介绍 在传统的RabbitMQ中,消息一旦发布到交换机,就会立即路由到绑定的队列。然而,延迟消息交换机允许我们设置一个特定的延迟时间,使得消息在指定的时间后才被路由到队列,从而实现消息的延迟...

    rabbitmq_delayed_message_exchange-3.9.0.ez

    但通过安装`rabbitmq_delayed_message_exchange`插件,我们可以创建一种特殊类型的交换机——延迟交换机,它能够根据消息头中的特定字段决定消息的投递时间。 2. X_DELAYED_TYPE属性:在创建延迟交换机时,需要设置...

    RabbitMQ消息插件rabbitmq_delayed_message_exchange3.7

    **RabbitMQ消息插件:rabbitmq_delayed_message_exchange 3.7**...综上,`rabbitmq_delayed_message_exchange`插件是RabbitMQ中实现消息延迟投递的重要工具,通过合理的配置和使用,可以在各种业务场景中发挥重要作用。

    rabbitmq_delayed_message_exchange-3.8.0.ez.zip

    这个插件允许我们创建特殊类型的交换机,这些交换机可以将消息放入一个具有特定延迟时间的队列,以便在预定的时间之后才被消费者处理。这在处理如订单支付超时、定时发送邮件等需要延时处理的任务时非常有用。 在...

    rabbitmq延时队列和四种交换机模式下队列的简单实现

    - `exchange:` 定义交换机,包括类型(Direct、Fanout、Topic或Headers)和名称。 - `queue:` 定义队列,包括名称和是否持久化。 - `binding:` 配置队列与交换机的绑定关系,包括路由键(对于Direct和Topic模式)或...

    rabbitmq开发规范

    交换机的持久化有助于保证RabbitMQ服务重启后,Exchange仍然存在,避免因服务重启导致的消息丢失。在Java和Spring中声明Exchange时,设置`durable`属性为`true`: - **Java方式**: ```java private static final...

    rabbitmq-delayed-message-exchange-3.8.0.tar.gz

    而"rabbitmq_delayed_message_exchange"是RabbitMQ的一个自定义交换机类型,它允许我们在发布消息时指定一个延迟时间。这个时间以毫秒为单位,可以用来控制消息何时到达队列并可被消费。 使用延迟消息交换机的步骤...

    rabbitmq_delayed_message_exchange-20171201-3.7.x.ez 插件

    在这个场景中,我们关注的是`rabbitmq_delayed_message_exchange-20171201-3.7.x.ez`插件,这是一个用于RabbitMQ的特殊交换机类型,它允许我们延迟消息的投递,即在特定时间后才将消息发送到队列。 **延迟消息...

    rabbitmq_delayed_message_exchange-3.8.0 延迟队列插件

    RabbitMQ延迟队列插件,即rabbitmq_delayed_message_exchange-3.8.0,是一个针对RabbitMQ消息代理的扩展,旨在提供一种机制,使得消息能够在特定延迟后才被投递到相应的队列。这个功能在很多业务场景中非常有用,...

    rabbitmq_delayed_message_exchange-20171215-3.6.x.zip

    延迟消息交换基于RabbitMQ的自定义交换机类型,它扩展了标准的AMQP协议。在RabbitMQ中,交换机负责将发布者发布的消息路由到合适的队列。默认情况下,消息是立即发送的,但有了延迟交换,我们可以指定消息在多少毫秒...

    rabbitmq队列和交换机的实现

    1. **直连交换机(Direct Exchange)**:直连交换机是最简单的交换机类型,它使用完全匹配的路由键(binding key)来将消息路由到特定的队列。生产者发送消息时指定一个路由键,如果该键与队列绑定的键完全相同,...

    rabbitmq_delayed_message_exchange-3.8.0.zip

    安装一个插件即可:https://www.rabbitmq.com/community-plugins.html ,下载rabbitmq_delayed_message_exchange插件,然后解压放置到RabbitMQ的插件目录...rabbitmq-plugins enable rabbitmq_delayed_message_exchange

    rabbitmq-delayed-message-exchange-20171215-3.6.x.zip

    rabbitmq_delayed_message_exchange-20171215-3.6.x.zip 是一个为RabbitMQ设计的插件压缩包,旨在为RabbitMQ添加延迟消息交换功能; 以下是几个典型的使用场景示例: 订单超时处理: 当用户下单后未及时支付时,...

    rabbitmq_delayed_3.6.x延迟插件.rar

    在这个例子中,"rabbitmq_delayed_message_exchange"插件提供了一个名为"x-delayed-message"的自定义交换机类型。这种交换机允许发布者在发送消息时指定一个延迟时间,RabbitMQ会将消息放入一个内部的延迟能力队列,...

Global site tag (gtag.js) - Google Analytics