Очередь сообщений: мы можем вызвать события, когда сообщение входит в очередь?

StackOverflow https://stackoverflow.com/questions/4255950

Вопрос

На работе мы обсуждаем, следует ли реализовать очередь сообщений для нашего применения PHP. В настоящее время мы смотрим на Apache's ActiveMQ. Одна вещь, на которой мы не совсем понятны, - это ли можно ли запускать процесс на основе сообщения, прибывающего в очередь.

Литература, которую мы нашли, настолько далеко, по-видимому, указывают на то, что сообщения сообщений являются на основе тягового механизма: процесс регулярно работает (как демон, либо Cron), и вытягивает свои входящие сообщения из очереди. Можно ли превратить это в толкательный механизм? То есть, есть ли способ иметь способ в очереди сообщений фактически инициировать HTTP-запрос (или процесс), когда поступает сообщение? Один вариант, который мы нашли, - это модель публикации / подписки, но это требует запуска нашего приложения PHP в бесконечной цикле для поддержания открытого (TCP) подключения к экземпляру ActiveMQ, который чувствует себя как немного ключей.

Любой вклад будет высоко оценен.

Это было полезно?

Решение

Очевидное решение - позволить издателю инициировать HTTP-запрос сразу после хранения сообщения, но это просит вопрос, почему тогда вы используете очередь сообщений?

Наличие набора потребителей, слушающих очередь и выполняя свою работу в качестве сообщений, не является ключей, это хорошо, масштабируемый дизайн. (Хотя я согласен, что запуск процесса PHP в бесконечном петле имеет его минусы.)

Почему вы выбрали очередь сообщений в отличие от, скажем, базы данных, которая хранит сообщения? «Продюсер» может хранить сообщение в виде ряда в таблице, а затем вызвать «потребитель» с помощью PK Message.

Другие советы

Подумайте о создании маршрута верблюда, который тянет сообщения из очереди (компонент JMS) и пересылает к конечной точке HTTP (HTTP-компонент). Вы можете даже решить провести маршрут верблюда в процессе брокера ActiveMQ - создавая своего рода интеллектуальный брокер маршрутизации. ActiveMQ делает это легко путем объединения библиотек Core Core в распределении Activemq.

Вот недавний соответствующий / связанный пост:

HTTP POST от Activemq с помощью верблюда

Ваша концепция дизайна приложения для мониторинга очереди - это способ запуска внешнего приложения. Посмотрите на IBM WebSphere «Приложения Trigger Monitor». В их реализации вы можете иметь несколько мониторов Trigger для запуска приложений, которые обрабатывают сообщения в очереди, поэтому он очень хорошо, как Monitor Monitor работает на сервере, приложения установлены на (и если вы проектировали для масштабируемости, чтобы вы могли быть в состоянии Есть несколько серверов приложений, если это необходимо).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top