Как получить обмен LVC в RabbitMQ для сохранения кэшированного значения при выполнении RabbitMQ? - PullRequest
0 голосов
/ 01 апреля 2019

Я изучаю возможность использования обмена LVC для использования уведомлений с отслеживанием состояния. Когда состояние меняется, подписчикам нужно сообщить об этом. Обмен LVC является ценным для этого, когда услуги не обязательно всегда активны и не гарантируется запуск в любом порядке.

Постоянная и долговременная очередь, в основном, позволяла бы мне выполнять ту же функцию, но если бы она была недоступна в течение длительного периода, размер очереди мог бы увеличиваться без необходимости, и читателю очереди, возможно, придется иметь дело с большим количеством ненужных сообщений.

Я запускаю RabbitMQ в док-контейнере. Я убедился, что сам обмен действительно долговечен, и хранилище данных mnesia отображается вне контейнера.

  1. Запустить RabbitMQ
  2. Опубликовать сообщение для обмена (продюсер.рб)
  3. Прослушивание сообщений с использованием анонимной очереди, связанной с обменом
  4. Видите, что последнее значение получено
  5. Stop RabbitMQ
  6. Запустить RabbitMQ
  7. Прослушивание сообщений с использованием анонимной очереди, связанной с обменом

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

Я ожидал увидеть то же сообщение, которое было первоначально опубликовано, вместо этого я не получил новых сообщений.

1 Ответ

0 голосов
/ 01 апреля 2019

Я просмотрел исходный код этого плагина, и я подозреваю, что вы видите, из-за того, как настроен сервер для этого плагина: код .Обратите внимание, что опция disc_copies не передается в create_table, поэтому данные хранятся только в оперативной памяти.

Если вы потратите время на открытие проблемы в этом хранилище, я могубыть в состоянии решить эту проблему относительно легко.


ПРИМЕЧАНИЕ: команда RabbitMQ контролирует список рассылки rabbitmq-users и только иногда отвечает на вопросыПереполнение стека.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...