hel*_*766 4 rabbitmq spring-boot
我试图计算兔子队列上的消息数量,然后在测试中清除队列。环顾四周,似乎表明我需要使用 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;
}
Run Code Online (Sandbox Code Playgroud)
测试类:
@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();
}
}
Run Code Online (Sandbox Code Playgroud)
如果您在项目中使用以下依赖项...
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
...然后您可以AmqpAdmin在测试中利用 Spring Boot AutoConfiguration 提供的 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);
}
}
Run Code Online (Sandbox Code Playgroud)
上面的示例显示了如何获取特定队列的消息计数。
| 归档时间: |
|
| 查看次数: |
5276 次 |
| 最近记录: |