RabbotMQ: Exchange四种模式介绍

Exchange是什么

       Exchange就是交换机,用于接收消息,并将根据路由键(routing key)将详细转发到它所绑定的消息队列(queue)。

在这里插入图片描述

Exchange属性

  • name:Exchange名称;
  • type:Exchange类型,包括direct、topic、headers和fanout;
  • Durability:是否持久化,true为持久化;
  • Auto Delete:当最后一个绑定到该Exchange上的queue删除后,自动删除该Exchange;
  • Internal:当前Exchange是否用于RabbitMQ内部使用,默认为false;
  • Arguments:扩展参数,用于AMQP协议自制定化使用;

Exchange类型

Direct Exchange:路由模式

       所有发送到direct Exchange的消息都会被转发到routing key指定的queue中;Direct模式可以使用RabbitMQ自带的Exchange即:Default Exchange,所以不需要讲Exchange进行任何绑定操作,消息传递时routing key必须完全匹配才能被接收,否则被抛弃;

Topic Exchange:通配符模式

       所有发送到topic Exchange的消息都会被转发到routing key中指定topic的queue中;
       Exchange将routing key和某个topic进行模糊匹配,此时队列(queue)需要绑定一个topic exchange;

  • topic exchange可以使用通配符进行模糊匹配:
  1. #:匹配一个或多个词;
  2. :只能匹配一个词;
    例如:test.# 可以匹配到 test.aaa 和 test.aaa.bbb;
           test.
    只能匹配到 test.aaa,不能匹配到test.aaa.bbb;

在这里插入图片描述

Fanout Exchange:订阅模式

       不处理routing key,只是简单的将queue绑定到Exchange上,发送到该Exchange上的消息都会被转发到所有与该Exchange绑定了的queue上,因此fanout exchange的效率是最高的。

Headers Exchange

       也是忽略routingKey的一种路由方式,使用headers中的键值对进行匹配的。Headers是一个键值对,可以定义成Hashtable,发送者在发送的时候定义一些键值对,接收者也可以在绑定时候传入一些键值对,两者匹配的话,则对应的队列就可以收到消息。匹配有两种方式all和any。这两种方式是在接收端必须要用键值"x-mactch"来定义。all代表定义的多个键值对都要满足,而any则代码只要满足一个就可以了。fanout,direct,topic exchange的routingKey都需要要字符串形式的,而headers exchange则没有这个要求,因为键值对的值可以是任何类型。

展开阅读全文

没有更多推荐了,返回首页