Я изучаю использование обмена LVC для использования уведомлений с отслеживанием состояния. При изменении состояния абонентам нужно сообщить об этом. Обмен LVC ценен для этого, когда службы не обязательно всегда работают и не гарантируются запуск в любом порядке.
Постоянная и надежная очередь в основном позволит мне выполнять ту же функцию, но если она не работает в течение длительного периода, размер очереди может вырасти без необходимости, и читателю очереди, возможно, придется иметь дело с большим количеством ненужных сообщений.
Я запускаю RabbitMQ в док-контейнере. Я убедился, что сам обмен действительно надежен, а хранилище данных mnesia отображается вне контейнера.
производитель.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}'"
потребитель.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
Я ожидал увидеть то же сообщение, которое было первоначально опубликовано, но новых сообщений не было.





Обновленный ответ:
Этот запрос функции был зарегистрирован как Ошибка № 21 на GitHub. и был реализован. Теперь опция disc_copies передается create_table и реализовано сохранение последнего значения.
Оригинальный ответ:
Я просмотрел исходный код этого плагина и подозреваю, что то, что вы видите, связано с тем, как настроен бэкэнд для этого плагина: код. Обратите внимание, что параметр disc_copies не передается в create_table, поэтому данные находятся только в ОЗУ.
Если вы потратите время, чтобы открыть проблему в этом репозитории, я смогу решить эту проблему относительно легко.
NOTE: the RabbitMQ team monitors the rabbitmq-usersmailing list and only sometimes answers questions on StackOverflow.