RabbitMQ(二)交换器类型

RabbitMQ共有四种交换机类型,分别是Direct、Fanout、Topic、Headers。

声明Exchange的属性

/**
 * name:交换器名称
 * type:交换器类型
 * durable:是否持久化,true表明此exchange是持久化的。
 * autoDelete:删除标志,没有队列与此exchange绑定时,是否删除。
 * internal:true表示当前Exchange是RabbitMQ内部使用,用户所创建的Queue不会消费该类型交换机下的消息,
 * 既然是为了RabbitMQ系统所用,作为用户,我们就没有必要创建该类型的Exchange,当然默认也是选择No.
 * arguments:交换器参数
 */

Exchange.DeclareOk exchangeDeclare(String exchange,
        BuiltinExchangeType type,
        boolean durable,
        boolean autoDelete,
        boolean internal,
        Map<String, Object> arguments) throws IOException;

1、Direct

处理路由键,消息到达该交换器后,将处理路由键,判断消息的路由键是否与绑定的队列的路由键完全匹配,如果匹配,那么将放入到队列中。

img

2、Fanout

不处理路由键,即可以不设置,消息到达此交换器后,会被广播到与该交换机绑定的所有队列上。

img

3、Topic

处理路由键,Topic Exchange 和 Direct Exchange 类似,也需要通过 RoutingKey 来路由消息,区别在于Direct Exchange 对 RoutingKey 是精确匹配,而 Topic Exchange 支持模糊匹配。分别支持和#通配符,表示匹配一个单词,#则表示匹配没有或者多个单词。

根据下图的匹配,发送routingkey = "topic.q"的消息后,将会到三个队列中。

img

4、Headers

不处理路由键,Headers Exchange 会忽略 RoutingKey 而根据消息中的 Headers 和创建绑定关系时指定的 Arguments 来匹配决定路由到哪些 Queue。

Headers Exchange 的性能比较差,而且 Direct Exchange 完全可以代替它,所以不建议使用。

posted @ 2022-07-25 16:11  往事随雨  阅读(75)  评论(0)    收藏  举报