我正在使用qpid-broker
进行集成测试,我的spring-boot-start-amqp
应用程序使用basicGet
(autoAck = false),basicAck
和basicReject
处理消息。 basicReject
(带有requeue = false)可以在我的外部rabbitmq
实例上正常使用,但不能与qpid-broker
一起使用。
我已经使用外部RabbitMQ实例测试了我的代码,该实例一切正常,但是对于嵌入式Apache Qpid服务器,测试失败,因为basicReject
无法正常工作。
获取消息并拒绝它:
rabbitTemplate.execute {
val response = it.basicGet(config.queueName, false)
it.basicReject(response.envelope.deliveryTag, false)
}
检查消息是否仍在队列中
rabbitTemplate.execute {
val response = it.basicGet(config.queueName, false)
Assertions.assertThat(response).isNull()
}
我的Qpid配置:
{
"name": "EmbeddedBroker",
"modelVersion": "7.0",
"authenticationproviders": [
{
"name": "password",
"type": "Plain",
"secureOnlyMechanisms": [],
"users": [
{
"name": "guest",
"password": "guest",
"type": "managed"
}
]
}
],
"ports": [
{
"name": "AMQP",
"port": "${qpid.amqp_port}",
"protocols": [ "AMQP_0_9_1" ],
"authenticationProvider": "password",
"virtualhostaliases": [
{
"name": "defaultAlias",
"type": "defaultAlias"
}
]
}
],
"virtualhostnodes": [
{
"name": "default",
"defaultVirtualHostNode": "true",
"type": "Memory",
"virtualHostInitialConfiguration": "{\"type\": \"Memory\" }"
}
]
}
为什么basicReject
可以在RabbitMQ实例上正常工作,但不能与Apache Qpid嵌入式代理正常工作?
编辑:我的解决方案是离开qpid并使用RabbitMQ Testcontainer。