Message Queue: Peut-on déclencher des événements lorsqu'un message entre dans la file d'attente?

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

Question

Au travail, nous discutons ou non de mettre en œuvre une file d'attente de messages pour notre application PHP. Actuellement, nous examinons la ActiveMQ d'Apache. Une chose que nous ne sommes pas tout à fait clair sur est de savoir s'il est ou non possible de déclencher un processus basé sur un message arrivant dans une file d'attente.

La littérature que nous avons trouvé à ce jour semble indiquer que les messages files d'attente sont un mécanisme à base de traction: le processus se déroule régulièrement (soit comme un démon ou un Cron), et tire ses messages entrants de la file d'attente. Est-il possible de transformer cela en un mécanisme de poussée? Autrement dit, est-il un moyen d'avoir fait le Message Queue lancer une requête HTTP (ou un processus) lorsqu'un message arrive? Une option que nous avons trouvé est le publish / subscribe modèle, mais cela nécessite l'exécution de notre application PHP dans une boucle infinie pour maintenir une connexion ouverte (TCP) à l'instance ActiveMQ, qui se sent comme un peu bidouille.

Toute entrée serait très apprécié.

Était-ce utile?

La solution

Une solution évidente est de laisser l'éditeur lancer la requête HTTP juste après le stockage du message, mais cela soulève la question, pourquoi utilisez-vous une file d'attente de message?

Avoir un ensemble de consommateurs écoute sur une file d'attente et de faire leur travail en tant que messages viennent ne sont pas une bidouille, il est bon, la conception évolutive. (Bien que je suis d'accord que l'exécution d'un processus de PHP dans une boucle infinie a ses inconvénients.)

Pourquoi avez-vous choisi une file d'attente de messages par opposition à, disons, une base de données qui stocke les messages? Le « producteur » pourrait stocker le message comme une ligne dans une table, puis déclencher le « consommateur » avec le PK du message.

Autres conseils

Considérons la création d'un itinéraire de chameau qui tire les messages de la file d'attente (composant JMS) et vers l'avant à un point de terminaison HTTP (composant HTTP). Vous pouvez même décider d'accueillir la route Camel sur le processus de courtier ActiveMQ - la création d'une sorte de courtier de routage intelligent. ActiveMQ facilite cette opération en groupant les bibliothèques Camel de base dans la distribution de ActiveMQ.

Voici un récent pertinent / connexe:

HTTP Post À partir de ActiveMQ en utilisant Camel

Votre concept de conception d'une application pour surveiller la file d'attente est la façon dont l'industrie de déclencher une application externe pour fonctionner. Jetez un oeil à IBM Websphere "Applications Trigger Monitor". Dans leur mise en œuvre, vous pouvez avoir plusieurs moniteurs de déclenchement pour lancer des applications que les messages de processus dans une file d'attente, il adapte très bien que les pistes de moniteur de déclenchement sur le serveur les applications sont installées sur (et si vous concevez pour l'évolutivité vous devriez pouvoir ont si besoin de plusieurs serveurs d'applications).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top