Я попытался установить значение true.Насколько я понимаю, сообщение должно постоянно доставляться потребителю снова и снова.Вместо этого он просто сидит там, не потребляя сообщение в очереди или какие-либо новые сообщения.Я включил регистрацию для com.budjb и com.rabbitmq и org.springframework.amqp вплоть до TRACE и не вижу никакого отключения ... Heeelppp
application.groovy
rabbitmq {
uri = new URI(System.env.CLOUDAMQP_URL ?: "amqp://test:test@localhost/test")
username = uri.userInfo.split(":")[0]
password = uri.userInfo.split(":")[1]
connections = [
[name : 'main',
host : uri.host,
port : 5672,
username : username,
requestedHeartbeat: 10,
automaticReconnect: true,
virtualHost : uri.path.substring(1), //remove leading slash
password : password]
]
queues = [[name: com.coco.jms.RabbitQueues.INDEX_TRANSACTION.destinationName, autoDelete: false, durable: true, exclusive: false]]
Потребитель:
class IndexTransactionConsumer implements MessageConsumerEventHandler {
static rabbitConfig = [
connection: 'main',
consumers : 1,
queue : Boolean.valueOf((String) System.getProperty("is_amqp_consumer")) ? RabbitQueues.INDEX_TRANSACTION.destinationName : null,
transacted: true,
autoAck : AutoAck.POST,
retry : true
]
def handleMessage(Map body, MessageContext messageContext) {
log.info("RABBITMQ - *CONSUME* Received event to index transaction (Map). " + body)
throw new Exception("Force fail")
}
....
}
ОБНОВЛЕНИЕ Похоже, что txRollback (), который запускается внутри AbstractConsumerContext.groovy, когда transacted = true и autoAck = AutoAck.POST останавливает basicRejectнет доступа к серверу RabbitMQ ..
if (configuration.getTransacted()) {
context.getChannel().txRollback()
}
if (configuration.getAutoAck() == AutoAck.POST) {
context.getChannel().basicReject(context.getEnvelope().deliveryTag, configuration.getRetry())
}