Если мы используем механизм запроса/ответа JMS с помощью "Временной очереди", будет ли этот код масштабироваться?
На данный момент мы не знаем, будем ли мы поддерживать 100 запросов в секунду или 1000 запросов в секунду.
Ниже приведен код, который я собираюсь реализовать. Он использует JMS в синхронном режиме. Ключевыми частями являются то, где создается "Потребитель", чтобы указать "Временную очередь", созданную для этого сеанса. Я просто не могу понять, является ли использование таких временных рядов масштабируемым дизайном.
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:
Я столкнулся с другим шаблоном, см. этот блог Идея состоит в том, чтобы использовать "обычные" очереди для отправки и получения. Однако для вызовов "Синхронный", чтобы получить желаемый ответ (т.е. Соответствующий запрос), вы создаете Потребителя, который слушает очередь приема с помощью "Селектора".
Шаги:
// 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 + "'" );
Таким образом, разница в этом шаблоне заключается в том, что мы не создаем новую временную очередь для каждого нового запроса. Вместо этого все ответы поступают только в одну очередь, но используют "селектор", чтобы убедиться, что каждый запрос-поток получает единственный ответ, который волнует.
Я считаю, что недостатком здесь является то, что вам нужно использовать "селектор". Я пока не знаю, является ли это менее предпочтительным или более предпочтительным, чем ранее упомянутый образец. Мысли?