Я бы сделал что-то вроде этого:
Храните сообщения (в их «сыром» виде) в таблице или другой персистентной структуре, связанной с их автором и имеющей метку времени (дата / время создания для каждого сообщения).
Создание ассоциации автора / канала публикации.
Создание одной (или, возможно, более) очередей "неотправленных сообщений". Базовая структура этой очереди:
| channelId | MessageId | Status | Last Attempt Timestamp
Итак, если я - Pamar, и я подписываюсь на Twitter, GBuzz и LinkedIn, когда я "публикую" что-то в вашей системе, я получаю запись в таблице основных сообщений, а новое сообщение получает ID = 7686956
Предположим, что сообщение было создано в 13:05:06 20100428
После его создания в очередь добавляется 3 записи:
| channelId | MessageId | Status | Last Attempt Timestamp
| LinkedIn | 7686956 | New | 20100428 13:05:06
| Twitter | 7686956 | New | 20100428 13:05:06
| Gbuzz | 7686956 | New | 20100428 13:05:06
(обратите внимание, что пока я пишу "LinkedIn", я ожидаю, что там будет идентификатор записи, а не строка)
Теперь у вас будет один процесс, получающий записи из этой очереди (или, может быть, один или несколько процессов для каждого канала, на ваш выбор, как вы хотите масштабировать это), получающий доступ к очереди, возможно, отсортированный от самой старой попытки до самой новой - этого "рабочего msgstr "Поток пытается опубликовать сообщение на внешнем канале, обновляет отметку времени последней попытки и устанавливает статус (OK, Failed).
Другой работник может удалить «ОК» записи в фоновом режиме.
Теперь, что происходит, когда вы добавляете «Facebook» в мой список каналов?
Легко, эта операция также будет иметь временную метку - в тот момент, когда вы добавите канал Facebook в мой пользователь. Вы получаете доступ к таблице сообщений и сбрасываете все сообщения, созданные до этой отметки времени в очереди:
| channelId | MessageId | Status | Last Attempt Timestamp
| Facebook | 7685963 | New | 20100429 11:12:08
| Facebook | 7680064 | New | 20100429 11:12:08
| Facebook | 7697046 | New | 20100429 11:12:08
Когда вы «внедряете» эти сообщения для нового канала, вы можете определять правила, например, только сообщения за последнюю неделю, так что «регулирование» является неявным.
Для добавления совершенно нового канала потребуется добавить пару записей в структуру и разработать рабочий или класс стратегии для подключения к новому каналу и публикации там с использованием соответствующего профиля входа и правильного API.