Похоже, я не понимаю что-то фундаментально, просьба направить на правильный путь.
Есть ПО1 и ПО2, которые взаимодействуют через RabbitMQ.. ПО1 делает create_channel, кладет сообщение в очередь, закрывает канал.
Потом по крону запускается ПО2, которое делает create_channel, читает сообщение, закрывает канал.
Эта схема перестает работать, когда со стороны ПО1 идет большой поток сообщений. Экспериментальным путем выяснено, что когда я делаю из ПОх create_channel, а при этом в другом ПОх тоже на этот момент уже есть установленное соединение, то более ранний канал перестает работать (переустанавливается с удалением накопленных сообщений) и сообщения в нем теряются.
Как результат, из например, 400 сообщений, которые поступают в течение 3 секунд, теряется около 5-6 сообщений случайным образом.
Как правильно организовать работу двух скриптов, запускаемых случайным образом? Есть ли возможность в RabbitMQ не создавать канал заново, а использовать существующий если он есть, и создавать его только когда он есть или закрывается?
Channel - это объект, с помощью которого происходит взаимодействие с сервером RabbitMQ.
В документации сказано, что необходимо использовать один Channel в одном потоке. Если вы используете один Channel в нескольких потоках, то это может привести к ошибкам.
В вашем случае, есть вероятность, что в момент создания Channel очередь пересоздается и теряются все сообщения, т.е:
А зачем и каким образом вы создаете канал?
По идее, это вообще не нужно делать. Кролик поддерживает автоматическое управление каналами - сам создает и сам закрывает. Соответственно при одновременной работе 2-х программ он будет использовать разные каналы для одной очереди, и ничего не пропадет.