RabbitMQ------Exchange交换机介绍

功能

接收消息,并根据路由键转发消息所绑定的队列

Exchange的相关属性

Name:				交换机名称
Type:				交换机类型	direct topic fanout headers等
Durability:		是否要持久化	true意为持久化
AutoDelete:		当最后一个绑定到Exchange的队列删除后,自动删除该Exchange
Internal:			当前Exchange是否用于RabbitMQ内部使用,默认为false
Arguments:		扩展AMQP协议自定义使用

接下来介绍三种Exchange,分别为 direct topic fanout

Direct Exchange

所有发送到Direct Exchange的消息被转发到RouteKey中指定的Queue
*可以使用RabbitMQ自带的default Exchange,无需binding操作,消息传递时,RouteKey必须完全匹配才会被队列接收,否则抛弃。

代码方面

//参数二指定交换机类型,参数三四五六分别为:
//是否可持久化 是否自动删除 是否仅内部使用
channel.exchangeDeclare(exchangeName,"direct",true,false,false,null);
//声明队列 名字 可持久化 独占性 自动删除 附加信息
channel.queueDeclare(queueName,false,false,false,null);
//建立一个绑定关系 队列名 交换机名 路由键
channel.queueBind(queueName,exchangeName,routingKey);

Topic Exchange

所有发送到Topic Exchange的消息被转发到所有关心RoutingKey中指定Topic的Queue上
Exchange将RouteKey和某Topic进行匹配,此时队列需要绑定一个topic
这是什么意思呢,我到别的地方找了一张图,解释的较为清楚:
在这里插入图片描述

代码方面,可以用通配符进行模糊匹配,其中#匹配一个或多个词,*匹配仅一个词,举个例子

log.#	匹配到log.info.aa
log.*		匹配到log.info,匹配不到log.info.aa
其中你可以把log.#作为声明时的routingKey,然后把log.info.aa这种
作为投递消息时用的routingKey

就好比你拿log.info.aa去开锁,而门锁要求log.#的锁才能开,所以你的锁当然开的开,也就能通过这个routingKey路由到相应队列中

Java代码与其他差不多,就是声明exchange的时候参数二为"topic"

Fanout Exchange

不处理路由键,只需把队列绑到交换机上
发送到交换机的消息全被转发到与该交换机绑定的所有队列上
因此Fanout交换机转发消息是最快的

Java代码上就是声明exchange的参数二为"",而publish的时候routingKey可以随便写,反正没啥关系了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值