Ist es eine gute Vorgehensweise, JMS Temporary Queue für synchrone Verwendung zu verwenden?

Wenn wir die JMS-Anfrage/Antwort-Mechanismus verwenden "Temporäre Queue" wird, dass code skalierbar sein?

Als jetzt, wir wissen nicht, ob wir Unterstützung von 100 requests pro Sekunde oder 1000 Anfragen pro Sekunde.

Den code unten ist was ich denke bin von der Umsetzung. Es macht den Einsatz von JMS in einer 'Synchronen' Mode. Die wichtigsten Teile sind, wo der "Verbraucher" wird erstellt, um Punkt a 'Temporäre Queue' , wurde für diese Sitzung. Ich kann nicht einfach herauszufinden, ob die Verwendung solcher Temporären Warteschlangen ist ein skalierbares design.

  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);

Update:

Stieß ich auf ein anderes Muster, siehe dieser blog
Die Idee ist die Verwendung von "normaler" Warteschlangen für das Senden und Empfangen. Aber für 'Synchronen' Anrufe, um die gewünschte Reaktion (z.B. übereinstimmung der Anfrage), erstellen Sie ein Verbraucher, der hört die Receive queue mit einem "Selektor".

Schritte:

    //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 + "'" );

So ist der Unterschied in diesem Muster ist, dass wir nicht erstellen Sie einen neuen temp-Warteschlange für jede neue Anfrage.
Stattdessen werden alle Antworten, die kommen, um nur eine queue, aber mit einem "Schalter" um sicherzustellen, dass jede Anfrage-thread erhält nur die Antwort, die ist kümmert.

Ich denke der Nachteil hier ist, dass Sie einen "Selektor". Ich weiß noch nicht, ob das ist weniger bevorzugt oder bevorzugt man mehr als die zuvor erwähnten Muster. Gedanken?

Kommentar zu dem Problem
Dieser Mechanismus wurde vorgeschlagen, in einer früheren Frage, die ich gestellt hatte: stackoverflow.com/q/10778485/233306 habe ich diese neue Frage nur wissen, ob das skalierbare design Kommentarautor: rk2010
Hallo, könnten Sie bitte teilen welche Methode Sie sich letztendlich entschieden? Kennt einer von den 2 Methoden tempq/selector hat einem Leistung/scallability Vorteile gegenüber der anderen? Danke. Kommentarautor: Borka

InformationsquelleAutor der Frage rk2010 | 2012-05-28

Schreibe einen Kommentar