Est-ce une bonne pratique à utiliser JMS File d'attente Temporaire synchrone utiliser?

Si nous utilisons JMS demande/réponse mécanisme à l'aide "File d'attente Temporaire", ce que ce code est-il évolutif?

Comme de maintenant, nous ne savons pas si nous allons soutenir les 100 requêtes par seconde, ou 1000s de requêtes par seconde.

Le code ci-dessous est ce que je pense de la mise en œuvre. Il rend l'utilisation de JMS dans un "Synchrone" de la mode. Les éléments clés sont où le "Consommateur" est créé au point une "File d'attente Temporaire" qui a été créé pour cette session. J'ai juste ne peux pas savoir si l'aide de ces Files d'attente Temporaires est une conception évolutive.

  destination = session.createQueue("queue:///Q1");
  producer = session.createProducer(destination);
  tempDestination = session.createTemporaryQueue();
  consumer = session.createConsumer(tempDestination);

  long uniqueNumber = System.currentTimeMillis() % 1000;
  TextMessage message = session
      .createTextMessage("SimpleRequestor: Your lucky number today is " + uniqueNumber);

  //Set the JMSReplyTo
  message.setJMSReplyTo(tempDestination);

  //Start the connection
  connection.start();

  //And, send the request
  producer.send(message);
  System.out.println("Sent message:\n" + message);

  //Now, receive the reply
  Message receivedMessage = consumer.receive(15000); //in ms or 15 seconds
  System.out.println("\nReceived message:\n" + receivedMessage);

Mise à jour:

Je suis tombé sur un autre modèle, voir ce blog
L'idée est d'utiliser des "normaux", les Files d'attente pour Envoyer et Recevoir des. Cependant, pour 'Synchrone' appels, afin d'obtenir la Réponse désirée (c'est à dire correspondant à la demande), vous créez un Consommateur à l'écoute de la file d'attente de réception à l'aide d'un Sélecteur'.

Suit:

    //1. Create Send and Receive Queue.
    //2. Create a msg with a specific ID
 final String correlationId = UUID.randomUUID().toString();
 final TextMessage textMessage = session.createTextMessage( msg );
 textMessage.setJMSCorrelationID( correlationId );

    //3. Start a consumer that receives using a 'Selector'.
           consumer = session.createConsumer( replyQueue, "JMSCorrelationID = '" + correlationId + "'" );

De sorte que la différence de ce modèle est que nous ne créons pas une nouvelle temp File d'attente pour chaque nouvelle demande.
Au lieu de toutes les réponses viennent à une seule file d'attente, mais l'utilisation d'un sélecteur " pour que chaque demande-thread reçoit seulement la réponse se soucie.

Je pense que l'inconvénient ici est que vous devez utiliser un sélecteur'. Je ne sais pas encore si c'est moins privilégiées ou plus par défaut que mentionné plus tôt motif. Pensées?

  • Ce mécanisme a été proposé dans une Question précédente que j'avais demandé: stackoverflow.com/q/10778485/233306 j'ai créé cette nouvelle Question juste pour savoir si c'est une conception évolutive
  • Bonjour, pourriez-vous s'il vous plaît de partager la méthode qui vous avez finalement décidé de l'utiliser? Ne l'une des 2 méthodes de tempq/sélecteur a importants performance/scallability des avantages sur les autres? Merci.
InformationsquelleAutor rk2010 | 2012-05-28