RabbitMQ — Кластеризация: В некоторых очередях наблюдается асинхронизация, и потребительский канал автоматически отключается

#rabbitmq #rabbitmqctl

Вопрос:

Я новичок в RabbitMQ. Я использую RabbitMQ 3.8.2 и Erlang 22.1 и настроил кластер RabbitMQ только с 2 узлами. Успешная настройка кластера, а затем я добавляю политику для HA-синхронизации следующим образом:

 rabbitmqctl set_policy ha-mirror "^" "{""ha-mode"":""all"",""ha-sync-mode"":""automatic""}"
 

Но через какой-то день я заметил, что некоторые очереди находятся в несинхронизированном режиме ( 1 выделено красным цветом).
Не уверен, почему это происходит? и сообщения в очереди показывают NaN. поэтому после этого всякий раз, когда я буду создавать очередь, она будет выдавать мне ошибку типа:

 System.TimeoutException: The operation has timed out.
   at RabbitMQ.Util.BlockingCell.GetValue(TimeSpan timeout)
   at RabbitMQ.Client.Impl.SimpleBlockingRpcContinuation.GetReply(TimeSpan timeout)
   at RabbitMQ.Client.Impl.ModelBase.QueueDeclare(String queue, Boolean passive, Boolean durable, Boolean exclusive, Boolean autoDelete, IDictionary`2 arguments)
   at RabbitMQ.Client.Impl.ModelBase.QueueDeclare(String queue, Boolean durable, Boolean exclusive, Boolean autoDelete, IDictionary`2 arguments)
   at RabbitMQ.Client.Impl.AutorecoveringModel.QueueDeclare(String queue, Boolean durable, Boolean exclusive, Boolean autoDelete, IDictionary`2 arguments)
   at DGSL.TF.Messaging.RabbitmqConsumerServiceManager.QueueDeclare(List`1 queueNames)
   at DGSL.TF.Messaging.RabbitmqConsumerServiceManager.CreateTicketPublishFiltersAndQueuesByStation()
   at DGSL.TF.Messaging.RabbitmqConsumerServiceManager.StartConsumer()
   at DGSL.TF.QrCCWorkerSerice_Core.Worker.InitializeCacheAndStartRabbitMQAndStartBatchPublish()
   at DGSL.TF.QrCCWorkerSerice_Core.Worker.DoProcessIfDeviceIsCommissioned()
   at DGSL.TF.QrCCWorkerSerice_Core.Worker.ExecuteAsync(CancellationToken stoppingToken)
   at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken)
   at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
   at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
   at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.Run(IHost host)
 

Итак, прошу вас, пожалуйста, дайте мне знать, что я должен сделать, чтобы избежать несинхронизации? Мне всегда нужно, чтобы 2 узла были синхронизированы?

а также я создал 2 канала для одного подключения, 1 для публикации данных и 1 для потребления данных.. Но иногда соединение сохраняется, но канал приема got исчезает, Так почему и в каком сценарии отключается канал потребителя? ИЛИ какое-то решение?

заранее спасибо