Допустим, у меня есть издатель и несколько слушателей. Когда издатель отправляет сообщение, оно должно быть получено всеми слушателями. Если один из слушателей не работает, он должен получить сообщение, как только он снова вернется.
Как я могу это реализовать?
Я думал об использовании очередей:
Каждый слушатель создает свою очередь и отправляет издателю сообщение о подписке с указанием местоположения своей очереди. Издатель сохраняет местоположение в файл или базу данных и начинает отправлять свои сообщения в эту очередь.
Итак, это будет график времени:
Издатель запущен. Нет слушателей.
Издатель отправляет сообщение 1.
Издатель отправляет сообщение 2.
Издатель отправляет сообщение 3.
Слушатель 1 запускается и подписывается с издателем.
Издатель отправляет сообщение 4.
Слушатель 1 получает сообщение 4.
Слушатель 2 запускается и подписывается с издателем.
Издатель отправляет сообщение 5.
Слушатель 1 получает сообщение 5.
Слушатель 2 получает сообщение 5.
Слушатель 2 удара.
Издатель отправляет сообщение 6.
Слушатель 1 получает сообщение 6.
Издатель отправляет сообщение 7.
Слушатель 1 получает сообщение 7.
Слушатель 2 возвращается, подписка не требуется.
Слушатель 2 получает сообщение 6.
Слушатель 2 получает сообщение 7.
Суть в том, что мне нужна одна очередь на слушателя и одна очередь или канал для отправки и получения сообщений для «начала прослушивания» и «остановки прослушивания».
Думал ли я в правильном направлении, или я совершенно не прав?