Je crée une bibliothèque composée d'un applicateur Log4J qui envoie des événements de manière asynchrone à un serveur distant. Lorsqu'une instruction de journal est créée, l'appender enregistre l'événement de manière asynchrone dans une file d'attente locale qu'un groupe de consommateurs récupère ensuite et envoie à la télécommande.JMS est-il la réponse à la nécessité d'une file d'attente de blocage persistante?
La solution complètement en mémoire serait de créer un BlockingQueue qui gérerait le problème de la concurrence. Cependant, j'aimerais que la file d'attente soit conservée de façon à ce que, si le serveur distant n'est pas disponible, je ne développe pas la file d'attente sans limite ou commence à rejeter les messages dans le cas d'une file d'attente limitée. Je pensais à utiliser une base de données H2 intégrée pour stocker les événements localement, puis utiliser un mécanisme d'interrogation pour récupérer les événements et les envoyer à la télécommande. Je préfèrerais utiliser un BlockingQueue plutôt que d'interroger une table de base de données.
Est-ce que JMS est la réponse?
EDIT:
Si JMS est la réponse, et il semble aller de cette façon, quelqu'un at-il des recommandations sur une solution JMS léger, intégrable qui peut être configuré pour accepter uniquement les messages en cours de traitement? En d'autres termes, je ne veux pas, et je ne le ferai peut-être pas, ouvrir un socket TCP sur lequel écouter.
EDIT:
J'ai ActiveMQ intégrés maintenant et il semble fonctionner. Merci a tous.
juste être conscient de la mise en œuvre de JMS que vous utilisent et comment l'infrastructure est mise en place. Certaines implémentations de JMS permettent à plusieurs threads de lire et de traiter des messages simultanément. Cela préserve FIFO du point de vue de se faire ramasser par la file d'attente, mais ne conserve pas nécessairement le FIFO du point de vue du moment où les messages sont traités. Encore une fois, vérifiez pour voir votre implémentation. Si vous exécutez JMS qui prend en charge les lectures simultanées, assurez-vous simplement qu'il est réglé pour les interdire. Ou si vous ne vous souciez pas, alors vous pouvez ignorer ce que je viens de dire. :) –
Merci. C'est OK si certaines données sont légèrement non ordonnées car elles peuvent être triées sur des données d'événement. Ma préoccupation avec JMS est la surcharge de l'intégration d'une autre bibliothèque.Il y a beaucoup d'implémentations JMS différentes - est-ce qu'il y en a une qui est plus facile à implémenter que d'autres et qui peut fonctionner de manière intégrée? – Collin
Je chercherais une implémentation JMS qui ne supporte que le besoin d'y accéder via la spécification JMS 1.1 et/ou 1.2. De cette façon, vous pouvez simplement lire et écrire par programmation à partir des files d'attente en utilisant uniquement l'API. La seule raison pour laquelle j'ai mentionné l'implémentation est que parfois vous devez configurer certaines choses avec l'implémentation du fournisseur pour activer/désactiver la concurrence, etc. Dans mon cas, nous nous en tenons aux produits IBM, parce que mon entreprise aime Big Blue. Mais vous pourriez probablement vous en sortir avec n'importe quelle implémentation. Dans notre cas, je dis toujours à nos développeurs de s'en tenir à l'API et de ne rien faire de spécifique à l'implémentation. –