Question

Nous exécutons un système de débit élevé qui utilise TIBCO-EMS JMS pour transmettre un grand nombre de messages vers et depuis notre serveur principal vers nos connexions client. Nous avons fait des statistiques et déterminé que JMS est la cause de beaucoup de latence. Comment pouvons-nous rendre Tibco JMS plus performant? Y a-t-il des ressources qui donnent une bonne discussion sur ce sujet.

Était-ce utile?

La solution

L'utilisation de messages non persistants est une option si vous n'avez pas besoin de persévérance. Notez que même si vous avez besoin de persévérance, il est parfois préférable d'utiliser des messages non persistants, et en cas de crash, effectuez une action de récupération différente (comme la retenue de tous les messages)

Ceci est pertinent si:

  • Les collisions sont rares (car la récupération prend du temps)
  • Vous pouvez facilement détecter un crash
  • Vous pouvez gérer des messages en double (vous ne savez peut-être pas exactement quels messages ont été livrés avant le crash

L'EMS fournit également des mécanismes persistants, mais moins d'épreuve par balle que la livraison garantie classique, celles-ci comprennent:

  • Au lieu de la livraison de message "exactement", vous pouvez utiliser "au moins une fois" ou "jusqu'à une fois" la livraison.
  • Vous pouvez utiliser le mécanisme de pré-fetch qui provoque la mémoire du client à la mémoire avant que votre application ne le demande.

Autres conseils

EMS ne devrait pas être le cou de la bouteille. J'ai fait des tests et nous avons obtenu une merde de débit sur notre serveur.

Vous devez essayer de déterminer où se trouve le col de bouteille. Est le problème dans le producteur du message ou du consommateur. Sont des messages qui s'accumulent dans la file d'attente.

Quel type de scénario faites-vous.

Pub / sup ou demander une réponse? Avez-vous un empilement de file d'attente temporaire. Trop de files d'attente temporaires peuvent entraîner des problèmes de performance. (Surtout quand ils s'attardent parce que vous n'avez pas fermé quelque chose correctement)

Publiez-vous sur un sujet avec des abonnés durables si c'est le cas. Essayez de combler le sujet à la file d'attente et de lire à partir de ceux-ci. Les abonnés durables peuvent également provoquer un peu de hoquet dans les performances car il doit suivre qui a des copies de tous les messages.

Assurez-vous que votre processus d'envoi a une session et plusieurs appels via cette session. N'ouvrez pas une session complète pour chaque opération. Réutiliser dans la mesure du possible. Faites de même pour le consommateur.

Assurez-vous de fermer lorsque vous avez terminé. EMS n'élimine pas les choses. Donc, si vous établissez une connexion et fermez simplement votre application, la connexion est toujours là et aspire les ressources.

Passez en revue votre tolérance pour les messages perdus dans le pair d'un crash. Si vous effectuez un client ACK et peu importe que vous ne trancez le traitement du message, passez à Auto. Je crois également que si vous utilisez (TEMS - TIBCO EMS pour WCF), il y a un problème avec la session. Donc, un message n'est que lorsqu'il est traité sur l'ensemble du message, nous sommes passés du client ACK à celui qui avait des DUP OK et cela a mieux fonctionné)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top