模拟RabbitMQ进行测试

时间:2019-07-01 02:39:31

标签: java spring rabbitmq spring-rabbitmq

我有一个Spring应用程序,我在其中使用RabbitMQ来发布和使用消息。连接工厂是通过以下方式创建的:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:int="http://www.springframework.org/schema/integration"
    xmlns:int-amqp="http://www.springframework.org/schema/integration/amqp"
    xmlns:rabbit="http://www.springframework.org/schema/rabbit"
    xmlns:int-stream="http://www.springframework.org/schema/integration/stream"
    xsi:schemaLocation="http://www.springframework.org/schema/integration/amqp http://www.springframework.org/schema/integration/amqp/spring-integration-amqp.xsd
        http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd
        http://www.springframework.org/schema/integration/stream http://www.springframework.org/schema/integration/stream/spring-integration-stream.xsd
        http://www.springframework.org/schema/rabbit http://www.springframework.org/schema/rabbit/spring-rabbit-1.4.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="RabbitMQ" class="com.services.RabbitMqListenerService" />

    <rabbit:connection-factory id="connectionFactory"
        host="${rabbitmq.host}" port="${rabbitmq.port}"
        username="${rabbitmq.username}" password="${rabbitmq.password}" cache-mode="${rabbitmq.cacheMode}"
                               connection-cache-size="${rabbitmq.connectionCacheSize}"/>
</beans>

但是,当我运行测试而不是创建此连接时,我想创建一个内存映射,该映射将作为我的队列。我要确保所有消息都同步,因为异步消息可能会使测试不稳定。

在spring-boot应用程序中,这非常简单。在application.java中,我可以添加以下代码,它会起作用:

public ConnectionFactory connectionFactory() {
        if (Boolean.parseBoolean(environment.getProperty("mock.rabbitmq"))) {
            return new MockRMQConnectionFactory();
        }
        com.rabbitmq.client.ConnectionFactory rabbitmqConnectionFactory = new com.rabbitmq.client.ConnectionFactory();
        rabbitmqConnectionFactory.setHost(environment.getProperty("rabbitmq.address"));
        rabbitmqConnectionFactory.setUsername(environment.getProperty("rabbitmq.user"));
        rabbitmqConnectionFactory.setPassword(environment.getProperty("rabbitmq.password"));
        rabbitmqConnectionFactory.setConnectionTimeout(
                Integer.parseInt(environment.getProperty("rabbitmq.connection.timeout")));
        return connectionFactory;   
}

当我尝试在XML文件(rabbitmq.xml)中创建rmq bean时,我不确定该怎么做。有人可以在这里帮我吗。

1 个答案:

答案 0 :(得分:0)

您可以像上面显示的那样拥有单独的bean配置文件进行测试。 使用以下注释注释测试。

  

@ContextConfiguration(位置=“ rabitmqconfiguration.xml”)   @RunWith(SpringJUnit4ClassRunner.class)

其中rabitmqconfiguration.xml将具有bean定义。