如何让RabbitMQ中的LVC交换在RabbitMQ执行中持久化缓存的值?

qyzbxkaa  于 8个月前  发布在  RabbitMQ
关注(0)|答案(1)|浏览(129)

我正在探索使用LVC交换来使用有状态通知。当状态发生变化时,需要告知订阅者。当服务不一定总是启动并且不能保证以任何顺序启动时,LVC交换对此很有价值。
一个持久的和持久的队列将允许我使用相同的功能,但是如果长时间关闭,队列大小可能会在不需要的情况下变大,队列读取器可能不得不处理许多不必要的消息。
我在Docker容器中运行RabbitMQ。我已经验证了交换本身实际上是持久的,并且mnesia对象Map到容器之外。
1.启动RabbitMQ
1.将邮件发布到exchange(producer.rb)
1.使用绑定到交换机的匿名队列侦听消息
1.确保收到最后一个值
1.停止RabbitMQ
1.启动RabbitMQ
1.使用绑定到交换机的匿名队列侦听消息
producer.rb

#!/usr/bin/env ruby
require 'bunny'
connection = Bunny.new
connection.start
channel = connection.create_channel

message = "Hello World! #{Time.new}"
exchange = channel.exchange('pub-sub', :durable => true, :type => 'x-lvc')
exchange.publish(message, :persistent => true)
puts " [x] Sent '#{message}'"

consumer.rb

require 'bunny'
connection = Bunny.new()
connection.start
channel = connection.create_channel
queue = channel.queue('', exclusive: true)
queue.bind('pub-sub')

begin
  puts ' [*] Waiting for messages. To exit press CTRL+C'
  queue.subscribe(block: true) do |_delivery_info, _properties, body|
    puts " [x] Received #{body}"
  end
rescue Interrupt => _
  connection.close
end

我希望看到最初发布的相同消息,但我没有收到新消息。

pgccezyw

pgccezyw1#

更新答案:
此功能请求报告为GitHub issue #21,并已实现。现在,disc_copies选项被传递给create_table,并实现了最后一个值的持久化。
原文回答:
我审查了该插件的源代码,我怀疑你所看到的是由于该插件的后端是如何设置的:code。请注意,没有disc_copies选项传递给create_table,因此数据仅驻留在RAM中。
如果你愿意花点时间在那个仓库中打开一个问题,我可以相对容易地修复这个问题。

相关问题