web-dev-qa-db-fra.com

cadre de publication/abonnement léger en java

Existe-t-il un bon framework léger pour Java fournissant le modèle de publication/abonnement?

Quelques caractéristiques idéales

  • Soutien aux génériques
  • Enregistrement de plusieurs abonnés auprès d'un éditeur
  • API principalement interfaces et quelques implémentations utiles
  • purement en mémoire, garanties de persistance et de transaction non requises.

Je connais JMS, mais c’est exagéré pour mes besoins. Les données de publication/abonnement sont le résultat d'analyses d'un système de fichiers, les résultats d'analyse étant envoyés à un autre composant pour traitement, qui sont ensuite traités avant d'être envoyés à un autre, etc. 

EDIT: Tout dans le même processus. PropertyChangeListener de beans ne le coupe pas tout à fait, car il rapporte les changements sur les propriétés, plutôt que de publier des éléments spécifiques. Je pourrais travailler avec ProprtyChangeListener en ayant une propriété "dernier objet publié" et des objets ainsi publiés. Les PropertyChangeListeners ne prennent pas en charge les génériques et sont intégrés à la sémantique des changements de propriété, plutôt qu'à la publication/abonnement pure. Le modèle Java.util Observer/Observable serait bon, mais Oberver est une classe concrète.

44
mdma

JMS est aussi léger ou lourd que vous le configurez. Nous utilisons par exemple HornetQ dans un projet avec une file d'attente en mémoire. Il est facile à installer, ne nécessite aucune configuration basée sur JNDI et est vraiment facile à utiliser.

Je pense que JMS en tant qu'API pour Message Pub/Sub est aussi simple que possible. (Et pas plus facile;)

13
Timo Westkämper

Il semble que cela corresponde aux exigences:

EventBus depuis Google Guava Library - "Communication de type publication-abonnement entre composants sans exiger que les composants s'enregistrent explicitement entre eux". Il peut aussi s'agir d'un AsyncEventBus qui enverra des événements sur un autre thread.

Quelques options supplémentaires à considérer:

  1. Si c'est dans le même processus, il est possible d'utiliser le motif Observer . Les abonnés peuvent ajouter des écouteurs et recevoir des notifications d'événements. Observable fait déjà partie de l'API Java.

  2. FFMQ est une implémentation complète de la file d'attente Java, light-weight, Fast JMS 1.1.

27
Andrejs

Puisque vous utilisez Spring, je ne sais pas si vous savez que Spring a son propre framework d’événements light . Il est principalement utilisé dans le cadre même, mais il est parfaitement utilisable par le code de l'application.

Par défaut, il s'agit d'un synchrone pub/sub, mais vous pouvez le rendre asynchrone à l'aide de ApplicationEventMulticaster.

6
skaffman

Je pense que Camel est également un bon candidat. Surtout avec le motif publish-subscribe

Chameau peut être intégré et est léger. Il propose des modèles d'intégration d'entreprise - de nombreux outils utiles pour l'intégration, au sein d'une application ou même avec d'autres acteurs (d'où le terme "intégration").

Cela se compare à Spring Integration mais plus complet IMO.

1
unludo

Si vous dépassez les limites du processus, un certain "poids" va être engendré. Pourquoi dites-vous que JMS est un poids lourd? L'API est assez simple? Il y a des implémentations supposées légères, par exemple link text des coûts plus lourds tels que la persistance et la transactionnalité sont facultatifs.

De quoi avez-vous besoin, qui est plus léger que cela?

0
djna

Bob Lee a une classe QueueFile à http://snipt.org/GWm/ que vous pourriez trouver intéressant. C'est une simple file d'attente persistante qui pourrait être utilisée par plusieurs consommateurs. On dirait que vous n’avez pas besoin de persistance, mais comme tout est si léger, cela pourrait quand même vous être utile.

0
Cagatay