2016-07-02 1 views
0

Je regarde un design avec environ 100 sujets. La création de sessions, de sujets, de messages consommateurs et le câblage de l'écouteur de message au consommateur semble utiliser beaucoup de ressources. Y a-t-il un meilleur moyen? Par exemple, puis-je réutiliser ma session ou doit-elle être créée à chaque fois? Ou devrais-je utiliser un autre paradigme?Existe-t-il un moyen plus efficace de créer une grande liste de consommateurs de messages pour JMS?

Voici la logique qui est appelé au moins cent fois:

 session = conn.createSession(false, Session.CLIENT_ACKNOWLEDGE); 
     final Topic destination = session.createTopic(topicName); 
     final MessageConsumer consumer = session.createConsumer(destination, selector); 
     consumer.setMessageListener(listener); 

Répondre

1
vous devez

sessions JMS sont pas thread-safe afin de créer un nouveau pour chaque abonnement. Certaines implémentations JMS comme ActiveMQ prennent en charge des sujets virtuels dans lesquels un abonnement peut être initié à plusieurs sujets. Cela résoudrait probablement votre problème. Voir http://activemq.apache.org/virtual-destinations.html.

0

Pour la même file d'attente et la même session client peuvent et doivent être réutilisés. Donc vous aurez 100 sessions au maximum.

Une autre solution peut impliquer certains ponts avec des sélecteurs sur le serveur JMS. Vous pouvez configurer votre jms pour transférer 100 rubriques vers une ou plusieurs files d'attente, puis consommer dans cette file d'attente. Mais il pourrait être difficile à implémenter si vos types de message sont tous différents dans ces sujets. Un espoir qui aide