Ruby使用RabbitMQ(进阶)

本文深入探讨Ruby如何使用RabbitMQ,重点讲解exchange的四种类型:fanout、direct、topic和headers,以及它们如何将消息分发到多个queue。同时,阐述了一个queue可以有多个消费者,消费者间存在竞争关系。文中还提到了channel的概念,它是TCP连接上的虚拟连接,允许多个并行操作以提升性能。
摘要由CSDN通过智能技术生成

Ruby使用RabbitMQ(进阶)

看本篇文章之前, 务必先看之前的文章Ruby使用RabbitMQ(基础)里面说到了一些基础内容.

下面, 来讲一下更加复杂且常用的方法和注意事项;

概念

amqp-concepts

在rabbitmq 中生产者会把消息发送给 exchange,
然后 exchange 再发送给queue, queue再发送给消费者;

在这里插入图片描述

exchange没有queue

如果 exchange 没有 queue,那么消息会被丢弃;

当然, 一般情况下, 都会绑定一个queue, 让它持久化.
这样, 消息就不会丢失了

exchange 新加入一个 queue-01 , 这个 queue-01 不会收到之前发送过的消息;

一个exchange多个queue

通过上面的图, 我们可以知道消息都是先经由exchange, 才分发给各个queue的;
那么, 到底要怎么分发消息呢?

这就涉及到 exchange 的类型, 它有四种类型;

  • direct (默认类型)
  • topic
  • headers
  • fanout

具体的分析, 在下面的 Exchanges 一节.

一个queue多个消费者

其中要注意的是, 消费者在同一个queue中属于竞争关系;
如果queue中有6条消息, 3个消费者;
那么, 3个消费者会每个人收到2条消息;

Exchanges

在上文, 我们提到了Exchange.
它会根据不同的类型来分发消息;

注意: exchange 并不会保存消息, queue 保存消息

类型

  • fanout
  • direct (默认类型)
  • topic
  • headers

fanout

fanout 是最简单的exchange类型;

它把接受到的消息, 转发给全部的queue;

在这里插入图片描述

# 生产者
exchange = channel.fanout('fanout-test-02', durable: true)

30.times do |n|
  exchange.publish("fanout-message: #{
     n}")
end
# 消费者
exchange = channel.fanout('fanout-test-02', durable
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值