Spring AMQP(RabbitMQ)引发通道关闭错误

Spring AMQP(RabbitMQ)引发通道关闭错误,rabbitmq,spring-amqp,spring-rabbit,Rabbitmq,Spring Amqp,Spring Rabbit,我试图通过创建MethodInterceptorConsumerDevice并将其添加到SMLCfactor.setAdviceChain(new ConsumerDevice())中,根据某些条件对消息进行重新排队。我还有concurrentConsumer配置,设置为10。当我的拒绝条件满足时,我发出BasicRequest命令,它将被另一个使用者重新交付和处理。在重新交付过程中,我发现以下错误 2019-11-07 17:34:13.268 ERROR 29385 --- [ 127.0.

我试图通过创建MethodInterceptor
ConsumerDevice
并将其添加到SMLC
factor.setAdviceChain(new ConsumerDevice())
中,根据某些条件对消息进行重新排队。我还有concurrentConsumer配置,设置为10。当我的拒绝条件满足时,我发出BasicRequest命令,它将被另一个使用者重新交付和处理。在重新交付过程中,我发现以下错误

2019-11-07 17:34:13.268 ERROR 29385 --- [ 127.0.0.1:5672] o.s.a.r.c.CachingConnectionFactory       : Channel shutdown: channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - unknown delivery tag 1, class-id=60, method-id=80)
2019-11-07 17:34:13.268 DEBUG 29385 --- [ool-2-thread-13] o.s.a.r.listener.BlockingQueueConsumer   : Received shutdown signal for consumer tag=amq.ctag-HUaN71TZUqMfLDR7k6LwGQ

com.rabbitmq.client.ShutdownSignalException: 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.ChannelN.asyncShutdown(ChannelN.java:516)
    at com.rabbitmq.client.impl.ChannelN.processAsync(ChannelN.java:346)
    at com.rabbitmq.client.impl.AMQChannel.handleCompleteInboundCommand(AMQChannel.java:178)
    at com.rabbitmq.client.impl.AMQChannel.handleFrame(AMQChannel.java:111)
    at com.rabbitmq.client.impl.AMQConnection.readFrame(AMQConnection.java:670)
    at com.rabbitmq.client.impl.AMQConnection.access$300(AMQConnection.java:48)
    at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:597)
    at java.lang.Thread.run(Thread.java:748)
2019-11-07 17:34:13.268错误29385---[127.0.0.1:5672]o.s.a.r.c.CachingConnectionFactory:通道关闭:通道错误;协议方法:#方法(回复代码=406,回复文本=Premission_失败-未知传递标记1,类id=60,方法id=80)
2019-11-07 17:34:13.268调试29385---[ool-2-thread-13]o.s.a.r.listener.BlockingQueueConsumer:收到consumer tag的关机信号=amq.ctag-HUaN71TZUqMfLDR7k6LwGQ
com.rabbitmq.client.ShutdownSignalException:通道错误;协议方法:#方法(回复代码=406,回复文本=Premission_失败-未知传递标记1,类id=60,方法id=80)
在com.rabbitmq.client.impl.ChannelN.asyncShutdown(ChannelN.java:516)上
位于com.rabbitmq.client.impl.ChannelN.processAsync(ChannelN.java:346)
在com.rabbitmq.client.impl.AMQChannel.handleCompleteInboundCommand(AMQChannel.java:178)上
位于com.rabbitmq.client.impl.AMQChannel.handleFrame(AMQChannel.java:111)
位于com.rabbitmq.client.impl.AMQConnection.readFrame(AMQConnection.java:670)
位于com.rabbitmq.client.impl.AMQConnection.access$300(AMQConnection.java:48)
位于com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:597)
运行(Thread.java:748)
我的信息没有丢失,但我看到了上面的一系列错误,无法理解为什么会发生这种情况。如果有人有任何线索,请引导我

以下是跟踪日志

2019-11-08 02:11:31.883 TRACE 8695 --- [askExecutor-138] o.s.a.r.c.CachingConnectionFactory       : AMQChannel(amqp://guest@127.0.0.1:5672/,99) channel.getChannelNumber()
2019-11-08 02:11:31.883  INFO 8695 --- [askExecutor-138] c.g.s.w.consumer.advice.ArgumentUtils    : Channel number before triggering redelivery : 99 
2019-11-08 02:11:31.883 TRACE 8695 --- [askExecutor-138] o.s.a.r.c.CachingConnectionFactory       : AMQChannel(amqp://guest@127.0.0.1:5672/,99) channel.basicReject([2, true])
2019-11-08 02:11:31.883  INFO 8695 --- [askExecutor-138] c.g.s.w.consumer.advice.ArgumentUtils    : ==============================================================================
2019-11-08 02:11:31.883  INFO 8695 --- [askExecutor-138] c.g.s.w.consumer.advice.ConsumerAdvice   : Requeue Message attempted, status : true
2019-11-08 02:11:31.884 TRACE 8695 --- [askExecutor-138] o.s.a.r.l.SimpleMessageListenerContainer : Waiting for message from consumer.
2019-11-08 02:11:31.884 TRACE 8695 --- [askExecutor-138] o.s.a.r.listener.BlockingQueueConsumer   : Retrieving delivery for Consumer@7783912f: tags=[[amq.ctag-eY7LN-1pSXPX8FKRBgt-ug]], channel=Cached Rabbit Channel: AMQChannel(amqp://guest@127.0.0.1:5672/,99), conn: Proxy@37ffe4f3 Shared Rabbit Connection: SimpleConnection@708dfe10 [delegate=amqp://guest@127.0.0.1:5672/, localPort= 58638], acknowledgeMode=AUTO local queue size=0
2019-11-08 02:11:31.884 DEBUG 8695 --- [askExecutor-138] o.s.a.r.l.SimpleMessageListenerContainer : Consumer raised exception, processing can restart if the connection factory supports it

com.rabbitmq.client.ShutdownSignalException: 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 org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.checkShutdown(BlockingQueueConsumer.java:436)
    at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.nextMessage(BlockingQueueConsumer.java:501)
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.doReceiveAndExecute(SimpleMessageListenerContainer.java:843)
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.receiveAndExecute(SimpleMessageListenerContainer.java:832)
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access$700(SimpleMessageListenerContainer.java:78)
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1073)
    at java.lang.Thread.run(Thread.java:748)
Caused by: com.rabbitmq.client.ShutdownSignalException: 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.ChannelN.asyncShutdown(ChannelN.java:516)
    at com.rabbitmq.client.impl.ChannelN.processAsync(ChannelN.java:346)
    at com.rabbitmq.client.impl.AMQChannel.handleCompleteInboundCommand(AMQChannel.java:178)
    at com.rabbitmq.client.impl.AMQChannel.handleFrame(AMQChannel.java:111)
    at com.rabbitmq.client.impl.AMQConnection.readFrame(AMQConnection.java:670)
    at com.rabbitmq.client.impl.AMQConnection.access$300(AMQConnection.java:48)
    at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:597)
    ... 1 common frames omitted

2019-11-08 02:11:31.884 ERROR 8695 --- [ 127.0.0.1:5672] o.s.a.r.c.CachingConnectionFactory       : Channel shutdown: channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - unknown delivery tag 2, class-id=60, method-id=90)
2019-11-08 02:11:31.883跟踪8695---[askExecutor-138]o.s.a.r.c.Caching连接工厂:AMQChannel(amqp://guest@127.0.0.1:5672/,99)通道。getChannelNumber()
2019-11-08 02:11:31.883信息8695---[askExecutor-138]c.g.s.w.consumer.advice.ArgumentUtils:触发重新交付前的频道号:99
2019-11-08 02:11:31.883跟踪8695---[askExecutor-138]o.s.a.r.c.Caching连接工厂:AMQ通道(amqp://guest@127.0.0.1:5672/,99)频道。基本对象([2,true])
2019-11-08 02:11:31.883信息8695---[askExecutor-138]c.g.s.w.消费者建议.论证:==============================================================================
2019-11-08 02:11:31.883信息8695---[askExecutor-138]c.g.s.w.consumer.advice.ConsumerDevice:尝试重新请求消息,状态:true
2019-11-08 02:11:31.884跟踪8695---[askExecutor-138]o.s.a.r.l.SimpleMessageListenerContainer:正在等待消费者的消息。
2019-11-08 02:11:31.884跟踪8695---[askExecutor-138]o.s.a.r.listener.BlockingQueueConsumer:正在检索Consumer@7783912f:tags=[[amq.ctag-eY7LN-1pSXPX8FKRBgt-ug]],channel=Cached Rabbit channel:AMQChannel(amqp://guest@127.0.0.1:5672/,99),康涅狄格州:Proxy@37ffe4f3共享兔子连接:SimpleConnection@708dfe10 [代表=amqp://guest@127.0.0.1:5672/,localPort=58638],acknowledgeMode=AUTO-local队列大小=0
2019-11-08 02:11:31.884调试8695---[askExecutor-138]o.s.a.r.l.SimpleMessageListenerContainer:使用者引发的异常,如果连接工厂支持,处理可以重新启动
com.rabbitmq.client.ShutdownSignalException:通道错误;协议方法:#方法(回复代码=406,回复文本=前提条件_失败-未知传递标记1,类id=60,方法id=80)
位于org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.checkShutdown(BlockingQueueConsumer.java:436)
位于org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.nextMessage(BlockingQueueConsumer.java:501)
位于org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.doReceiveAndExecute(SimpleMessageListenerContainer.java:843)
位于org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.receiveAndExecute(SimpleMessageListenerContainer.java:832)
在org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access$700(SimpleMessageListenerContainer.java:78)
位于org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1073)
运行(Thread.java:748)
原因:com.rabbitmq.client.ShutdownSignalException:通道错误;协议方法:#方法(回复代码=406,回复文本=predition_失败-未知传递标记1,类id=60,方法id=80)
在com.rabbitmq.client.impl.ChannelN.asyncShutdown(ChannelN.java:516)上
位于com.rabbitmq.client.impl.ChannelN.processAsync(ChannelN.java:346)
在com.rabbitmq.client.impl.AMQChannel.handleCompleteInboundCommand(AMQChannel.java:178)上
位于com.rabbitmq.client.impl.AMQChannel.handleFrame(AMQChannel.java:111)
位于com.rabbitmq.client.impl.AMQConnection.readFrame(AMQConnection.java:670)
位于com.rabbitmq.client.impl.AMQConnection.access$300(AMQConnection.java:48)
位于com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:597)
…省略了1个公共帧
2019-11-08 02:11:31.884错误8695---[127.0.0.1:5672]o.s.a.r.c.CachingConnectionFactory:通道关闭:通道错误;协议方法:#方法(回复代码=406,回复文本=前提条件#u失败-未知传递标记2,类id=60,方法id=90)

您需要显示代码和配置

SMLC的默认配置似乎是自动确认消息,而此失败是因为您已经拒绝了它;为什么您要直接与通道交互

您只需抛出一个异常,容器就会代表您拒绝该消息。

我不知道
"rabbit.listener.acknowledgeMode": "MANUAL",
"rabbit.listener.defaultRequeueRejected": "true",
"rabbit.listener.prefetchCount": "1",