Spring Boot RabbitMQ 队列计数?

4

我想要统计我的Rabbit队列中消息的数量,并在测试中清空该队列。查看了一些资料,似乎需要使用RabbitAdmin来获取计数,但不确定如何将其自动装配到我的测试中?有什么建议吗?

@Configuration
public class MyConfig {

@Value("${queue.producer.name}")
private String queueName;


@Bean
public Jackson2JsonMessageConverter jsonMessageConverter(){
    Jackson2JsonMessageConverter con= new Jackson2JsonMessageConverter();
    return con;
}

@Autowired
private ConnectionFactory rabbitConnectionFactory;

@Bean
public Queue queue() {
    return new Queue(queueName, true);
}

@Bean
public RabbitTemplate rabbitTemplate() {
    RabbitTemplate r = new RabbitTemplate(rabbitConnectionFactory);
    r.setMessageConverter(jsonMessageConverter());
    r.setConnectionFactory(rabbitConnectionFactory);
    return r;
}

测试类:

 @RunWith(SpringRunner.class)
@SpringBootTest
public class TestIT {


@Resource
private RabbitAdmin admin;

@Test
public void testQueue() throws IOException, InterruptedException{

    System.out.println(getQueueCount("publish"));

    admin.purgeQueue("publish",true);


}

protected int getQueueCount(final String name) {
    AMQP.Queue.DeclareOk declareOk = admin.getRabbitTemplate().execute(new ChannelCallback<AMQP.Queue.DeclareOk>() {
        public AMQP.Queue.DeclareOk doInRabbit(Channel channel) throws Exception {
            return channel.queueDeclarePassive(name);
        }
    });
    return declareOk.getMessageCount();
}

}
1个回答

8
如果您在项目中使用以下依赖项...
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

如果您想在测试中使用Spring Boot自动配置提供的AmqpAdmin Bean,则可以利用它。

例如:

@RunWith(SpringRunner.class)
@SpringBootTest
public class RabbitmqTests {

    @Autowired
    private AmqpAdmin amqpAdmin;

    @Test
    public void purgeQueue() throws Exception {
        Integer count = (Integer) amqpAdmin.getQueueProperties("publish").get("QUEUE_MESSAGE_COUNT");
        amqpAdmin.purgeQueue("publish", true);
    }

}

上面的示例展示了如何获取特定队列的消息计数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接