【问题标题】:What is a good way to stop a subscription to a Rabbit MQ queue without notifying the server?在不通知服务器的情况下停止订阅 Rabbitmq 队列的好方法是什么?
【发布时间】:2016-04-26 02:01:59
【问题描述】:

使用 Bunny gem 订阅:

session = Bunny.new
session.start
channel = session.create_channel
queue   = channel.queue( queue_id, { durable: true })

queue.subscribe do | delivery_info, metadata, payload |
  puts payload
end

如何在不通知服务器的情况下取消订阅?

用例:当消费者掉线时,服务器不会收到通知。所以我需要找到一种方法来处理这个问题。但是当脚本退出或线程被杀死时,它显然会清理并通知服务器。

【问题讨论】:

  • 我不明白你的问题,因为服务器必须知道死去的消费者或未订阅的消费者。你可以看看hearthbeat feature
  • 当网络连接断开并且我正在尝试模拟时,我们遇到了丢失消息的问题。

标签: ruby rabbitmq amqp bunny


【解决方案1】:

如果您在 linux 下运行,您的测试可以执行 iptables 命令来阻止与 RabbitMQ 的连接。例如:

iptables -i lo -A INPUT -p tcp --dport 5672 -j DROP

要删除 DROP 规则,可以执行:

iptables -D INPUT -i lo -p tcp -m tcp --dport 5672 -j DROP

【讨论】:

  • 是的,在玩过 Wireshark 之后,我有了同样的想法。我想知道使用哪个 unix 命令,因为似乎有很多方法可以管理端口。
【解决方案2】:

您是否尝试过拔掉网线或禁用 wifi 卡?

如果这不是一个选项,我建议您找到一个可以为您模拟这种效果的工具。但实际上,我认为使用硬线连接然后拔下物理电缆将是按需重现这种情况的最佳方式。

【讨论】:

  • 是的,拔掉网线是一种有效的方法。但是,这是一种非常糟糕的测试和开发方式。所以我正在寻找一种通过代码模拟的方法。另外,我希望 Rabbit MQ 实例在同一台机器上运行,因此在这种情况下拔掉电源将不起作用。
猜你喜欢
  • 1970-01-01
  • 2019-02-20
  • 1970-01-01
  • 2016-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-13
相关资源
最近更新 更多