Я пытаюсь решить, будет ли convertSendAndReceive работать для следующего случая использования:Spring AMQP convertSendAndReceive с успокоительной многопоточных производителя
У меня есть RESTful веб-сервис, который необходимо сделать RPC вызовы и получить ответ обратно в для обслуживания запроса. Я никогда не использовал функцию ответа-ответа в Spring-amqp или RabbitMQ.
Будет ли это работать или я возглавляю путь, чреватый опасностью?
EDIT: Я беспокоюсь, будет ли поток, создающий сообщение, получить правильный ответ, а не получить ответ другого потока.
Я добавил к тесту, который указан в документации весны-amqp под названием JavaConfigFixedReplyQueueTests. Я добавил следующий тестовый пример:
(Мое соединениеFactory bean другое, но это только, чтобы указать нашу конфигурацию SSL для экземпляра rabbitmq моей компании, поэтому я не перечисляю это здесь. Все существующие тесты прошли с этим изменением.)
@Test
public void testReplyContainer_multiple_threads() throws Exception
{
fixedReplyQRabbitTemplate.setReplyTimeout(-1);
// limit the number of actual threads
int poolSize = 100;
ExecutorService service = Executors.newFixedThreadPool(poolSize);
List<Future<?>> futures = new ArrayList<>();
for(int n = 0; n < 1000; n++)
{
Future<?> f = service.submit(makeNumberedRunnable(n));
futures.add(f);
}
// wait for all tasks to complete before continuing
for(Future<?> f : futures)
{
f.get();
}
// shut down the executor service so that this thread can exit
service.shutdownNow();
}
private Runnable makeNumberedRunnable(int n)
{
return new Runnable()
{
@Override
public void run()
{
assertEquals("FOO" + n, fixedReplyQRabbitTemplate.convertSendAndReceive("foo" + n));
}
};
}
в основном мой тест создает много потоков и убедившись, что правильный поток специфического ответа возвращается. Тест проходит очень хорошо, что дает мне немного уверенности в моем подходе.
Я надеюсь, что Gary Russell может позвонить или, может быть, Artem Bilan, чтобы дать мне свое мнение экспертов. Тем не менее, я приветствую тех, кто хорошо осведомлен в этой области, чтобы дать мне советы.
Спасибо за ваше время.
Спасибо, Гэри! Я думал, что это так, но я не мог найти, где кто-то делает многопотокового продюсера, как мой, поэтому я хотел быть уверенным. –
Это довольно фундаментальное требование - структура была бы непригодной для использования, если бы вы не могли полагаться на такие вещи. –
Я бы предпочел задать этот вопрос и выглядеть здесь как идиот, а не реализовывать несколько критически важных решений, которые ломаются в производстве. :-) –