J'ai écrit une application Web en couches composée d'un client Web riche (PHP) qui interagit avec un service Java. Le client Web est hébergé sur un serveur Apache et le service Java s'exécute sur la même machine physique (pour réitérer: l'application entière, le client et le service, s'exécutent sur la même machine physique).Base de données en tant qu'antipattern IPC
Demande d'utilisateur -> DB < - Poller -> RequestHandler -> StoreResult dans DB -> page de mises à jour Web Client avec le résultat (AJAX).
La communication entre le client et le service utilise une base de données relationnelle pour transmettre des messages. Le service Java dispose d'un scrutateur à thread unique qui recherche et traite les messages/demandes du client. Le système fonctionne, mais je ne suis pas confiant dans mon choix de conception.
Quelqu'un a-t-il des commentaires à propos de cette stratégie? J'ai lu que l'utilisation d'une base de données comme antipattern IPC est une mauvaise pratique, ou du moins inappropriée. Cependant, les alternatives - XMLRPC, pipes nommées - semblent impliquer des dépendances supplémentaires.
Merci de votre visite.
Vous utilisez la base de données en tant que file d'attente de messages. La chose que vous devriez examiner est: cela fait-il une bonne file d'attente de message? que diriez-vous des choses comme la fiabilité (ne pas manquer un seul message dans n'importe quelle situation) et le débit? – jrharshath
Les bases de données ne sont pas vraiment destinées aux files d'attente/files d'attente. Ils sont utilisés pour la persistance du logiciel de mise en file d'attente, comme [ActiveMQ] (http://activemq.apache.org/). Mais certaines bases de données fournissent [support de file d'attente native (SQL Server)] (http://www.developer.com/db/article.php/3640771/Getting-Started-with-SQL-Server-Service-Broker.htm). –
Autre chose: avez-vous regardé Quercus? – mario