Изначальная задача: Есть некая околореалтаймовая система. В одном месте на телнет интерфейсе генерируются сообщения сплошным потоком. Раньше скрипт слушал его напрямую, периодически отваливался и терял сообщения. Необходимо было повысить надежность и избавиться от потерь сообщений. Я решил в качестве шины задействовать редис - List. Собственно скрипт который стал слушать непосредственно на серверах делает только 1 действие - rpush. Скрипт на приемной стороне - lpop. Поскольку серверов с логикой у нас 2 - основной и резервный, то я решил переделать на горячий резерв.
Все логично - 2 редиса, создаем класс обертку, храним коннекты в array внутри, проксируем вызов rpush - если чтото пошло не так на этапе выполнения, отлавливаем эксепшен, переключаемся на следующий коннект и так в цикле пока все не переберем. Не получилось - сбрасываем сообщение в лог.
А теперь то что можно сделать изящней - я явно прописал rpush и логику переключения. Если нужен будет к примеру set, придется его точно также реализовывать. И я думаю что можно как то это обойти - неважно какую функцию вызвали в классе-прокси, прокинуть её в коннектор и если сгенерировалось NoMethodError - вернуть ошибку обратно. А если пошло чтото не так в процессе выполнения - отработать логику поиска живого коннекта к редису
Резервирование sentinel закрыть может