Dans une application Web Java, j'ai une charge de message récurrente de type A (par exemple, 20 000 toutes les heures). Ensuite, j'ai un deuxième type de messages (type B) qui apparaissent occasionnellement mais qui ont une priorité plus élevée que le type A (disons 3 000). Je veux être capable de traiter ces messages sur une ou plusieurs machines en utilisant un logiciel open source. Il me semble que je pourrais le faire avec JMS si j'avais un serveur JMS qui enverrait des messages de sa file d'attente en fonction des priorités (par exemple, envoyer trois messages de type B, puis un de type A même si tous les messages de type A sont en haut de la file d'attente de messages). Connaissez-vous un serveur JMS capable de le faire - ou connaissez-vous une autre façon de l'implémenter?Traitement des messages avec priorités
Répondre
Définissez la priorité du message lorsque vous appelez "send (..)" sur MessageProducer (QueueSender, etc.). Ou, vous pouvez définir la priorité par défaut sur le MessageProducer de 0-9 (9 est le plus élevé). Définir la priorité sur le message lui-même ne fonctionnera pas. C'est dépassé par le producteur. Uri est correct - que la priorité soit respectée ou non est spécifique à l'implémentation. Je crois qu'OpenJMS respecte généralement la priorité dès le départ, mais ne la garantit pas.
JMS états Spec: "JMS does not require that a provider strictly implement priority ordering of messages; however, it should do its best to deliver expedited messages ahead of normal messages."
La norme JMS prend en charge les priorités de message par défaut est 4, vous pouvez spécifier d'autres). Je pense que vous devez définir cela dans le producteur de message ET dans le message lui-même (il y a des méthodes sur les deux).
Je pense qu'ActiveMQ le supporte.
Toutefois, de nombreux courtiers JMS ont la gestion des priorités désactivée par défaut. Il y a un drapeau que vous devrez peut-être changer, quelque chose comme "supportJMSPriority", quelque part dans la configuration du courtier. Apache Camel vous permet également d'écrire vos propres reséquenceurs de message afin que vous puissiez implémenter toute forme de priorité que vous souhaitez.
Pourquoi ne pas utiliser une autre MDB pour traiter explicitement l'autre type de message. Les détails de priorité ci-dessus s'appliquent toujours, plus vous aurez plus de contrôle sur le traitement simultané pour chaque type de message.
Pour la plupart des situations je préfère 1 mdb ou récepteur de message par type de message. De cette façon, si une transaction est annulée vous savez immédiatement quel type de messages a causé le problème
Karl
Vous pouvez utiliser plus d'un sujet. Même avec des priorités, si votre processeur est attaché en traitant un message de priorité inférieure, il n'arrêtera pas ce qu'il fait.
Si vous avez des processeurs séparés, un message de haute priorité peut commencer le traitement dès qu'il peut être remis, sans attendre que d'autres messages soient traités.
- 1. Traitement parallèle des messages JMS?
- 2. Traitement des messages retardés NServiceBus
- 3. Amélioration du traitement des messages UDP
- 4. Modèle de pipeline pour le traitement des messages
- 5. link_to_unless_current échoue lors du traitement de formulaires contenant des messages d'erreur avec des routes restfull
- 6. Définition des priorités sur les événements HTML
- 7. Traitement des clients avec une connexion lente
- 8. Priorités de test sur le plugin delayed_job dans les rails
- 9. imprimer les messages d'erreur dans la version javascript du traitement
- 10. Constructeur Java avec traitement des dépendances approprié
- 11. Utilisation d'un délégué avec des messages
- 12. .NET priorités de chargement de l'ensemble
- 13. Traitement des messages pour la fenêtre à partir d'un autre processus
- 14. Traitement FOP avec paramètres
- 15. Traitement des rappels
- 16. Assurer le traitement en série des messages JMS dans un cluster OC4J
- 17. Traitement des paiements Django
- 18. Traitement des erreurs AS3
- 19. Traitement des fichiers C++
- 20. Traitement des demandes FastCGI
- 21. Emule le traitement avec python?
- 22. Gestion des exceptions et messages conviviaux
- 23. GServer recevoir des messages
- 24. traitement des paiements - pylons/python
- 25. Traitement uniquement des noeuds sélectionnés
- 26. Traitement des quantités d'articles décimaux
- 27. Déboguer les messages avec Flex?
- 28. Traitement obsolète inclut avec Autoconf
- 29. Données graphiques avec traitement Java
- 30. Entrée utilisateur des entiers - Traitement des erreurs