为了账号安全,请及时绑定邮箱和手机立即绑定

RabbitMq为什么需要Exchange

看过rabbitmq官网的demo,没有交换机的也可以实现队列。后来场景复杂了,用到了exchange。具体上exchange有什么用处?能清晰的解答下吗?

正在回答

3 回答

我觉得 消息队列正确的用法 应该是一个生产者对应一个 交换机。 一个 消费者对应一个 队列, 至于 分发的逻辑 是通过各种绑定来实现的。

例如 电子商务场景:产生订单的有很多 渠道 比如网站,团购,秒杀,第三方等等。每个 都 对应一个 交换机。产生的订单 数据是类似的 但key 可以是 商品类别加上id 等信息组合。比如 大类.小类.商品id 这种格式

刚开始的时候 只有一个 总仓 订单处理也就一个程序 一个消费者 也就一个队列。 所有交换机都绑定这个队列。这样所有订单都到总仓去了

慢慢生意大了 比如生鲜分出去了个 仓 有单独的处理程序了 也成了个新的队列 这样 在mq 后台 根据key 中大类是生鲜的绑定到新的队列就好了

再过段时间 某次秒杀,预计量比较大。实现准备了个小仓库 把这个秒杀商品预先包好存放在那单独处理了。这时运行个 新的程序 产生个 新的队列 ,这时就将秒杀交换机的 按照key 中的id为此商品的 绑定到新的队列。这样就可以了 而无论是秒杀的其他产品,还是在其他渠道上这个商品订单还是 总仓处理

其实 交换机还可以再绑交换机 多次分发更实现更复杂的逻辑。就是这么绑来绑去,实现 不用改代码就实现了整个信息流随着业务的变迁

1 回复 有任何疑惑可以回复我~

你所说的简单的例子没有声明交换器,用双引号(即空字符串)表示,但实际他是调用了默认的交换器,并以队列名作为路由键发布消息!消费端也是看似没有绑定交换器,但底层却是根据队列名作为路由键进行绑定!交换器始终是存在的,不存在生产者直接将消息发送给队列

2 回复 有任何疑惑可以回复我~

AMQP协议中的核心思想就是生产者和消费者隔离,生产者从不直接将消息发送给队列。生产者通常不知道是否一个消息会被发送到队列中,只是将消息发送到一个交换机。先由Exchange来接收,然后Exchange按照特定的策略转发到Queue进行存储。同理,消费者也是如此。Exchange 就类似于一个交换机,转发各个消息分发到相应的队列中。

4 回复 有任何疑惑可以回复我~
#1

207xiaopang

你所说的简单的例子没有声明交换器,用双引号(即空字符串)表示,但实际他是调用了默认的交换器,并以队列名作为路由键发布消息!消费端也是看似没有绑定交换器,但底层却是根据队列名作为路由键进行绑定!交换器始终是存在的,不存在生产者直接将消息发送给队列
2018-05-21 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

RabbitMq为什么需要Exchange

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信