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