Использование PHP в течение достаточно долгого времени теперь и я задавался вопросом, о чем эта целая "очередь сообщений" - все. Давайте возьмем Facebook, например. Я могу обновить свое состояние, но затем я должен показать, что обновления статуса всем моим друзьям (скажем, у меня есть 3 000 подписчиков). Еще больше работы, если существуют комментарии и они должны быть уведомлены всем друзьям, которые оставили комментарий по электронной почте. С примером я видел, кажется, что весь очередь сообщений делает взятие "сообщение" (мое обновление статуса) и помещает его в некоторое временное пространство (файловая система или Таблица базы данных). У меня затем есть задание крона, которое вытаскивает его и обновляет мою таблицу.
После этих слов как я иду об управлении теми данными? Я предполагаю, что запутываюсь относительно того, как это действительно помогло бы мне. Как я перевожу следующую функцию в очередь сообщений и затем планирую, чтобы функция работала в более позднее время?
1 - Обновите мое состояние 2 - Теперь публикуют его через мою страницу и всех моих друзей. 3 - Если комментарий оставляют, теперь электронная почта, что последний комментарий тем, кто "подписывается" на тот комментарий.
Мой вопрос, как я управляю теми данными? Я просто вставляю "комментарий", затем имеют "задание", которое вытаскивает тот комментарий, и включите его в функцию, которая обрабатывает его?
Вот пример, который я планирую на изучении.
http://www.freeopenbook.com/php-hacks/phphks-CHP-5-SECT-18.html
Заранее спасибо.
У меня вопрос, как мне манипулировать этими данными? Могу ли я просто вставить "комментарий", а затем иметь "задание" , которое извлекает этот комментарий и вставляет его в функцию, которая его обрабатывает?
Точно.
Публикация обновлений статуса на страницах Facebook, вероятно, не связана с очередью сообщений - я на самом деле не знаю их конкретного дизайна, но предполагаю, что обновленные данные просто предоставляются по запросу через запрос, когда пользователи загружают свои страницы. (Если у Facebook нет отдельного процесса для денормализации данных обновления статуса.) 1
Напротив, отправка уведомлений об обновлении статуса по электронной почте является отличным кандидатом для постановки сообщений в очередь.
Типичная реализация включает запись нового сообщения (обычно минимального, возможно, только вашего идентификатора пользователя) в определенную очередь сообщений - возможно, очередь «EmailStatusUpdateNotifications».
Другой процесс удаляет сообщения из очереди и точно знает, что с ними делать. Процесс, посвященный отправке сообщений электронной почты с обновлением статуса, будет использовать идентификатор пользователя (содержимое сообщения) для загрузки вашего текущего статуса и списка адресов электронной почты ваших друзей, создания сообщений электронной почты и их отправки.
1 Оказывается, вы можете найти много полезной информации об архитектуре Facebook в Почему Facebook, Digg и Twitter так сложно масштабировать? при высокой масштабируемости.
Могу ли я просто вставить "комментарий", затем создать "задание", которое вытащит этот комментарий и подключит его к функции, которая его обработает?
Один из моментов с очередями сообщений - это разделение служб и асинхронная обработка.
У вас запущена служба очереди сообщений, когда кто-то меняет свой статус, вы посылаете сообщение в определенную очередь. Вы можете сделать это из php-кода, который запускается, когда пользователь меняет свой статус.
Затем у вас есть служба/фоновое задание, выполняющееся где-то, которое извлекает сообщения из этой очереди. Это, конечно, будет что-то внешнее по отношению к процессу PHP, который отправил сообщение на основе HTTP-вызова. Это задание извлекает сообщения из очереди, выполняет обработку сообщения - например, выясняет, кому отправить письмо, и затем отправляет его.
Теперь у вас есть гибкий способ обработки таких почтовых обновлений.