Как использовать RabbitMQ для хранения данных формы в трехуровневой архитектуре

Итак, в моем тестовом проекте у меня есть 3 системы, которые я использую:

  1. Передняя часть => Форма WordPress
  2. Серверная часть => SuiteCRM
  3. Интеграция => Промежуточное ПО (RabbitMQ)

У меня есть так называемый «человек», который может зарегистрироваться на мероприятии на сайте WordPress.

Чего я хочу добиться после нажатия на кнопку, так это того, что данные формы будут отправлены в мой инструмент CRM:

Это означает, что таблица базы данных 'registered_users' моей CRM будет заполнена данными формы. (таблица уже создана и столбцы соответствуют форме).

Мои вопросы:

  1. Может ли то, к чему я стремлюсь, работать с использованием Middleware RabbitMQ? Можно ли использовать RabbitMQ для передачи переменных PHP и их хранения в базе данных?
  2. Если да, каков мой подход к интеграции этого промежуточного программного обеспечения?
  3. Идея хорошая? Способен ли RabbitMQ это сделать?
  4. Каковы другие хорошие подходы к решению моей проблемы, но с использованием программного обеспечения, подобного RabbitMQ?

person Kahn Kah    schedule 06.07.2016    source источник
comment
Это плохое использование термина «промежуточное ПО». В любом случае RabbitMQ (как и все очереди) принимает некоторую форму сообщения. Затем позже один или несколько потребителей обрабатывают сообщение и удаляют его из очереди.   -  person user2864740    schedule 06.07.2016
comment
Спасибо за комментарий! Что было бы хорошей альтернативой «промежуточному программному обеспечению»? Я изо всех сил пытался найти подходящий термин (приложение, которое стоит между двумя другими приложениями). Я думал, что это правильно. В моем случае я предполагаю, что SuiteCRM является потребителем, верно?   -  person Kahn Kah    schedule 06.07.2016
comment
Проблема больше похожа на запрос N-tier. Очереди полезны при наличии асинхронного потока и могут давать ряд преимуществ в некоторых сценариях (маршрутизация, воспроизведение, буферизация нагрузки). Однако это не является правильным решением для всех проблем.   -  person user2864740    schedule 06.07.2016
comment
Спасибо, я только что отредактировал заголовок   -  person Kahn Kah    schedule 06.07.2016
comment
В любом случае RabbitMQ будет выглядеть так: 1) пользователь нажимает кнопку на клиенте (веб-браузере), который отправляет форму; 2) внешнее веб-приложение (например, PHP) публикует сообщение на Rabbit Exchange с необходимой информацией; 3) потребительское приложение слушает очередь от кролика и «что-то делает» (все, что предполагается) в ответ на получение конкретного сообщения/данных.   -  person user2864740    schedule 06.07.2016
comment
Хорошо, мне нравится, куда это движется! Однако у меня есть вопрос: возможно ли, что потребительское приложение «что-то делает» с сообщением, например, с вводом в базу данных? Это означает, что сообщение (переменные) должно быть отформатировано определенным образом, если я прав, верно?   -  person Kahn Kah    schedule 06.07.2016
comment
Думайте о сообщении как о тексте в формате JSON (RabbitMQ допускает любые данные, но...). Приложение-потребитель только знает, что содержится в сообщении и в каком-либо локальном контексте. Потребитель не имеет сведений о том, какие переменные существовали в издателе, за исключением того, что они были преобразованы в информацию в сообщении. Сообщение JSON может быть, например, создано из соответствующей информации регистрационной формы.   -  person user2864740    schedule 06.07.2016
comment
Конечно, он может делать все, что захочет.   -  person user2864740    schedule 06.07.2016
comment
Спасибо за всю вашу информацию user2864740! Проведу мозговой штурм дальше и постараюсь превратить вашу информацию в работающий проект!   -  person Kahn Kah    schedule 06.07.2016


Ответы (1)


Вы можете делать с RabbitMQ все, что хотите, но архитектура, которая вам нужна, немного больше, чем то, что вы предлагаете.

  1. Пользователь нажимает кнопку «Отправить» в форме и отправляет сообщения на ваш веб-сервер.
  2. Веб-сервер фиксирует отправку формы и создает документ JSON.
  3. Веб-сервер публикует документ JSON через RabbitMQ
  4. Серверная служба использует документ JSON и обновляет базу данных

Базовые руководства по RabbitMQ по PHP должны помочь вам:

Вы специально ищете Worker Queue:

Вы можете проверить эти ресурсы для PHP и RabbitMQ от Джеймса Титкамба (также известного как «asgrim»)

и несколько моих собственных книг, а также одна по PHP и RabbitMQ.

person Derick Bailey    schedule 06.07.2016
comment
1 работник или больше не имеет большого значения. базовый шаблон, который вы используете, — это рабочий шаблон. он позволяет вам масштабироваться по мере необходимости, но не требует наличия нескольких рабочих экземпляров. Я рекомендую этот подход, потому что он позволяет вам расти, если вам нужно. более простой подход, такой как самое первое руководство, может выполнить работу, но быстро столкнется с ограничениями по мере продвижения вперед. - person Derick Bailey; 06.07.2016
comment
Ох, ладно !! Теперь логично использовать рабочий паттерн! Большое спасибо! - person Kahn Kah; 06.07.2016