gpt4 book ai didi

grails - 基本确认时的rabbitMQ AlreadyClosedException(知识)

转载 作者:行者123 更新时间:2023-12-02 15:56:31 29 4
gpt4 key购买 nike

我的 groovy 代码将 Rabbit Native Plugin 用于 grails:

def handleMessage(def body, MessageContext context) {
// With noAck=false, messages must be acknowledged manually with basic.ack.
boolean noAck = false
// send Ack on true and nack on false
if(processMessage(new SensorEvent(body))){
context.channel.basicAck(context.getEnvelope().getDeliveryTag(),noAck)
}else{
context.channel.basicNack(context.getEnvelope().getDeliveryTag(), false, false);

}
return ''
}

如果我注释掉执行 Ack 和 Nack 的两行代码,一切正常。如果我取消注释 basicAck 我得到以下异常
com.rabbitmq.client.AlreadyClosedException: channel is already closed due to channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - unknown delivery tag 1, class-id=60, method-id=80)
at com.rabbitmq.client.impl.AMQChannel.ensureIsOpen(AMQChannel.java:195)
at com.rabbitmq.client.impl.AMQChannel.transmit(AMQChannel.java:309)
at com.rabbitmq.client.impl.AMQChannel.transmit(AMQChannel.java:303)
at com.rabbitmq.client.impl.ChannelN.basicReject(ChannelN.java:1045)
at com.rabbitmq.client.impl.recovery.RecoveryAwareChannelN.basicReject(RecoveryAwareChannelN.java:72)
at com.rabbitmq.client.impl.recovery.AutorecoveringChannel.basicReject(AutorecoveringChannel.java:354)

我已经看到建议使用 Subscription.Ack()。 Java/Groovy rabbitMQ 中没有 Subscription 类。

知道为什么我会遇到异常吗?

编辑:因为我使用的是 native 插件,所以我需要创建一个实现接口(interface)的消费者
def handleMessage(def body, MessageContext context)

订阅通过以下方式处理:
 /**
* Consumer configuration.
*/
static rabbitConfig = [
"queue": "my.queueName"
]

最佳答案

这个错误:

PRECONDITION_FAILED - unknown delivery tag 1,



意味着您正在尝试在与接收所述消息的 channel 不同的 channel 上确认消息。交付标签的范围为每个 channel

关于grails - 基本确认时的rabbitMQ AlreadyClosedException(知识),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33531062/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com