2016-09-29 2 views
0

J'écris une application Spring Boot qui va écouter sur un ou plusieurs sujets JMS. Nous avons choisi ActiveMQ pour notre implémentation JMS.Qui offre de meilleures performances: Un seul sujet JMS avec une instruction switch ou des sujets individuels?

Nos principales préoccupations concernent les performances et l'évolutivité. Nous attendons potentiellement des milliers de messages arrivent chaque seconde. Nous avons trouvé deux alternatives:

  1. Utilisez un seul sujet et une seule méthode @JmsListener. Dans l'écouteur, inspectez une propriété JMS pour déterminer la stratégie correcte pour la gestion du message.

    @JmsListener(destination = "response", containerFactory = "myTopicFactory") 
    public void onMessage(Message message) throws IOException { 
        message.getProperty("message.type") 
        JmsHandler handler = messageStrategyMap.get(messageType); 
        handler.handle(message); 
    } 
    
  2. Utilisez plusieurs sujets et plusieurs méthodes @JmsListener. Aucune logique de commutation n'est nécessaire dans ce cas.

    @JmsListener(destination = "responseType1", containerFactory = "myTopicFactory") 
    public void onMessage1(Message message) throws IOException { 
        // Handle message type 1 
    } 
    
    @JmsListener(destination = "responseType2", containerFactory = "myTopicFactory") 
    public void onMessage2(Message message) throws IOException { 
        // Handle message type 2 
    } 
    

Un avantage de l'approche # 1 est qu'il n'y a pas besoin de gérer les ressources pour de multiples destinations; il n'y a qu'une seule destination. Cela signifie également que les systèmes collaborateurs n'ont besoin de connaître qu'un seul sujet.

Un avantage de l'approche # 2 est qu'il n'y a aucun besoin de n'importe quel type de logique de commutation. Tout message entrant dans le sujet A a une charge utile formatée spécifiquement pour le sujet A. Le problème avec cette approche est que les ressources pour gérer les messages entrants peuvent ne pas être allouées efficacement entre les différents écouteurs JMS.

En outre, tous les conseils sur la configuration de l'usine de conteneurs sont appréciés.

Répondre

1

Cela dépend de la taille et du volume du message. Avec plusieurs écouteurs, vous obtenez également plusieurs threads, ce qui peut accélérer le processus jusqu'à l'abandon de nombreux sujets (et donc des threads). Je suggère de mettre en place un test rapide et un benchmark sur votre système représentatif et vous serez armé de chiffres fermes à comparer.