使用Restful多线程生成器

时间:2016-06-24 21:05:39

标签: java spring spring-amqp

我正在尝试确定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给我他们的专家意见。但是,我欢迎任何知识渊博的人给我他们的建议。

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

所有...sendAndReceive(...)方法都会正确关联请求/回复,以便在请求线程上返回正确的回复。