File d'attente JMS avec de multiples consommateurs
J'ai un JBoss-6 serveur avec HornetQ et une seule file d'attente:
<queue name="my.queue">
<entry name="/queue/test"/>
</queue>
Il y a différents consommateurs (sur des machines différentes) connecté à cette file d'attente, mais seulement un unique consommateur est actif à la fois. Si j'ai de l'arrêt de cette consommation, les messages sont immédiatement traitées par l'un des autres consommateurs.
Depuis mes messages ont certains temps de traitement, je veux de plusieurs consommateurs processus de leur unique messages simultanément.
Je me souviens d'un semblable dans les versions antérieures de JBoss où cette installation a fonctionné sans problèmes. Ici, dans Jboss-6 le système de messagerie qui fonctionne bien, à l'exception du problème décrit ci-dessus. Cette question est similaire à Plusieurs clients consommateurs possible dans hornetq?, mais le scénario n'est pas semblable à la mienne.
Mise à jour de 1: Si je fermer (CTRL+C) un consommateur, il y a un court délai (jusqu'à ce que le serveur l'a perdu à la consommation) jusqu'à la prochaine consommateur obtient le message.
Mise À Jour 2: Extrait De Code
VoidListener ml = new VoidListener();
QueueConnectionFactory qcf = (QueueConnectionFactory)
ctx.lookup("ConnectionFactory");
QueueConnection conn = qcf.createQueueConnection();
Queue queue = (Queue) ctx.lookup(queueName);
QueueSession session = conn.createQueueSession(false,
QueueSession.AUTO_ACKNOWLEDGE);
QueueReceiver recv = session.createReceiver(queue,"");
recv.setMessageListener(ml);
conn.start();
Et la MessageListerner:
public class OlVoidListener implements MessageListener
{
public void onMessage(Message msg)
{
counter++;
logger.debug("Message ("+counter+") received");
try {Thread.sleep(15*1000);} catch (InterruptedException e) {}
}
}
OriginalL'auteur Thor | 2011-08-10
Vous devez vous connecter pour publier un commentaire.
Avec plusieurs consommateurs à une file d'attente, les messages sont équilibrées entre les consommateurs.
Que vous avez un peu de temps le message, vous devez désactiver la mise en mémoire tampon par la mise à la consommation-fenêtre de taille.
Sur hornetQ il y a un exemple sur la distribution, sur la façon de désactiver le client de mise en mémoire tampon et de donner un meilleur support pour ralentir les consommateurs. (une lente consommateur est un consommateur qui auront le temps de traitement du message)
message systèmes de pré-extraction/lecture des messages au client de la mémoire tampon pour accélérer le traitement et d'éviter la latence du réseau. Ce n'est pas un problème si vous avez un traitement rapide des files d'attente et un consommateur unique.
JBoss Messaging offert la lenteur de la consommation de l'option lors de la connexion de l'usine et hornetq offre au consommateur la taille de la fenêtre.
La plupart des systèmes de messagerie, sera de vous fournir un moyen d'activer ou de désactiver le client pré-chargement.
Consumer A
est du traitement d'un message tout enConsumer B
est inactif et il y a d'autres éléments dans la file d'attente?Oui, le message de systèmes de pré-extraction/lecture des messages au client de la mémoire tampon pour accélérer le traitement et d'éviter la latence du réseau. Ce n'est pas un problème si vous avez un traitement rapide des files d'attente et un consommateur unique. Il va être un problème de ralentir le traitement aussi. JBoss Messaging offert la lenteur de la consommation de l'option lors de la connexion de l'usine et hornetq offre au consommateur la taille de la fenêtre. La plupart des systèmes de messagerie, sera de vous fournir un moyen d'activer désactiver client pré-chargement. Je suis en plaçant cette initiale à ma réponse
Cela semble être la bonne réponse, mais malheureusement je ne peut pas activer la
<consumer-window-size>0</consumer-window-size>
, voir: stackoverflow.com/questions/7021485J'ai répondu à votre question. vous avez utilisé le mauvais connecteur. Regardez le droit à votre hornetq-configuration.xml
OriginalL'auteur Clebert Suconic
Je suis désolé mais je ne comprends pas ce qu'est exactement le problème. Nous avons utilisé hornetq dans la version 2.0.0.GA version et 2.2.2.Final. Dans les deux cas, la file d'attente de l'équilibrage de charge fonctionne très bien. Si vous définissez plusieurs consommateurs pour une file d'attente et tous d'entre eux sont actifs, les messages seront distribués entre eux automatiquement. Premier message aux consommateurs Une, deuxième consommateur B, la troisième à la consommation C et ainsi de suite. C'est la façon dont les files d'attente avec plusieurs consommateurs œuvres - c'est gratuit équilibrage de la charge 🙂 C'est normal que lorsque vous arrêtez l'un consommateur, d'autres en reçoivent plus de messages.
Hmm... j'ai la même configuration de file d'attente comme vous et pas d'autres modifications de la configuration. Si vous avez ce problème, je m'attends que c'est quelque chose de mal avec vos consommateurs. Utilisez-vous des banques multilatérales de développement?
Les consommateurs ne sont Bmd mais autonome des programmes java.
Donc, je vous le conseille pour commencer la question de l'enquête auprès des consommateurs de code. Vous pouvez coller un morceau de code?
J'ai mis à jour la question.
OriginalL'auteur Piotr De