Очередь сообщений: мы можем вызвать события, когда сообщение входит в очередь?
-
27-09-2019 - |
Вопрос
На работе мы обсуждаем, следует ли реализовать очередь сообщений для нашего применения PHP. В настоящее время мы смотрим на Apache's ActiveMQ. Одна вещь, на которой мы не совсем понятны, - это ли можно ли запускать процесс на основе сообщения, прибывающего в очередь.
Литература, которую мы нашли, настолько далеко, по-видимому, указывают на то, что сообщения сообщений являются на основе тягового механизма: процесс регулярно работает (как демон, либо Cron), и вытягивает свои входящие сообщения из очереди. Можно ли превратить это в толкательный механизм? То есть, есть ли способ иметь способ в очереди сообщений фактически инициировать HTTP-запрос (или процесс), когда поступает сообщение? Один вариант, который мы нашли, - это модель публикации / подписки, но это требует запуска нашего приложения PHP в бесконечной цикле для поддержания открытого (TCP) подключения к экземпляру ActiveMQ, который чувствует себя как немного ключей.
Любой вклад будет высоко оценен.
Решение
Очевидное решение - позволить издателю инициировать HTTP-запрос сразу после хранения сообщения, но это просит вопрос, почему тогда вы используете очередь сообщений?
Наличие набора потребителей, слушающих очередь и выполняя свою работу в качестве сообщений, не является ключей, это хорошо, масштабируемый дизайн. (Хотя я согласен, что запуск процесса PHP в бесконечном петле имеет его минусы.)
Почему вы выбрали очередь сообщений в отличие от, скажем, базы данных, которая хранит сообщения? «Продюсер» может хранить сообщение в виде ряда в таблице, а затем вызвать «потребитель» с помощью PK Message.
Другие советы
Подумайте о создании маршрута верблюда, который тянет сообщения из очереди (компонент JMS) и пересылает к конечной точке HTTP (HTTP-компонент). Вы можете даже решить провести маршрут верблюда в процессе брокера ActiveMQ - создавая своего рода интеллектуальный брокер маршрутизации. ActiveMQ делает это легко путем объединения библиотек Core Core в распределении Activemq.
Вот недавний соответствующий / связанный пост:
Ваша концепция дизайна приложения для мониторинга очереди - это способ запуска внешнего приложения. Посмотрите на IBM WebSphere «Приложения Trigger Monitor». В их реализации вы можете иметь несколько мониторов Trigger для запуска приложений, которые обрабатывают сообщения в очереди, поэтому он очень хорошо, как Monitor Monitor работает на сервере, приложения установлены на (и если вы проектировали для масштабируемости, чтобы вы могли быть в состоянии Есть несколько серверов приложений, если это необходимо).