我正在尝试确定convertSendAndReceive是否适用于以下用例:
我有一个RESTful Web服务,需要进行RPC调用并获得响应以便为请求提供服务。我从来没有在spring-amqp或RabbitMQ中使用回复功能。
这会起作用还是我走上了充满危险的道路?
编辑:我关心的是产生消息的线程是否会得到正确的相应响应,而不是获得另一个线程的响应。
我已经添加了一个名为JavaConfigFixedReplyQueueTests的spring-amqp文档中列出的测试。我添加了以下测试用例:
(我的connectionFactory bean不同,但这只是为我公司的rabbitmq实例指定我们的SSL配置,所以我不在这里列出。所有现有的测试都通过了这个改变。)
@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给我他们的专家意见。但是,我欢迎任何知识渊博的人给我他们的建议。
感谢您的时间。
答案 0 :(得分:0)
所有...sendAndReceive(...)
方法都会正确关联请求/回复,以便在请求线程上返回正确的回复。