2 votes

activemq, jms topics et subscribers avec sélecteurs

J'ai besoin d'aide avec les thèmes et les sélecteurs.

J'ai un scénario avec un topic ayant plusieurs abonnés durables (chacun avec un sélecteur) tous les messages entrant dans le topic ne sont pas lus par les consommateurs - à cause de sélecteurs qui ne correspondent pas.

Il s'agit d'un comportement correct.

Toutefois, le problème survient lorsque les messages non appariés atteignent un certain seuil de quantité, car à ce moment-là, aucun autre message n'est délivré aux consommateurs activemq essaie de distribuer ces anciens messages non appariés, mais comme il n'y a pas de consommateur pour eux, tout est bloqué. Quelqu'un peut-il m'aider ?

Mon installation est ActiveMq 5.5

Existe-t-il une option de configuration ou s'agit-il simplement d'une conception défectueuse ?

3voto

whaley Points 8789

Je dirais qu'il s'agit d'une conception défectueuse étant donné qu'il existe de meilleures alternatives et qu'il s'agit peut-être d'un bogue dans ActiveMQ.

Première question : est-ce que votre producteur qui publie dans ce sujet met en place l'en-tête JMSExpiration sur ces messages ?

Si oui, la première chose à faire est de créer une question Jira en détaillant le scénario que vous avez décrit ci-dessus, car il semble incorrect qu'ActiveMQ continue à conserver et à envoyer des messages pour lesquels aucun sélecteur ne s'applique.

En ce qui concerne les défauts de conception, dès que vous vous entendez dire "J'ai besoin d'abonnés durables" et que vous utilisez ActiveMQ, vous devriez immédiatement vous tourner vers l'utilisation de destinations virtuelles. Les destinations virtuelles présentent les avantages des sujets en ce sens qu'un producteur peut envoyer un message à une destination et faire en sorte que ce message soit propagé à un nombre indéterminé d'autres destinations pour être consommé, mais elles n'ont pas les inconvénients liés à l'existence d'abonnés durables sur un sujet. Pour en savoir plus Destinations virtuelles ici .

2voto

Tim Bish Points 5575

Ceci est lié à la manière dont ActiveMQ gère les sélecteurs épars. L'implémentation actuelle ne page pas dans le magasin pour rechercher des messages correspondant à des sélecteurs épars, vous devez donc faire quelques changements de configuration pour essayer de contourner ce problème. Vous pouvez définir la taille maxBrowsePageSize dans la politique de destination configurée, la valeur par défaut étant 400. Voir ce qui suit page .

Les destinations virtuelles dans ActiveMQ sont probablement le meilleur choix, c'est presque toujours le cas lorsqu'il s'agit d'utiliser des abonnés durables. Vous pouvez cependant ajouter une expiration à vos messages et configurer la politique pour que les messages expirent sur les abonnés durables inactifs si vous utilisez une version SNAPSHOT d'ActiveMQ 5.6.

1voto

Nicholas Points 8468

Cela semble être un bogue (ou du moins un inconvénient), mais il est possible de le contourner en utilisant la fonction Destinations virtuelles .

Citation :

Il est à noter que la création d'un sujet lors de l'envoi de messages au sujet, mais ce surcoût est relativement faible. [ ] [ ] selectorAware, de sorte que seuls les messages qui correspondent à l'un des existants sont effectivement envoyés. L'utilisation de cette option permet d'éviter l'accumulation de messages non appariés lorsque des sélecteurs sont utilisés par des consommateurs exclusifs. exclusifs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X