RabbitMQ 信道(channel)挂掉,但连接仍然存在,同时出现错误:Received remote Channel.Close (406): PRECONDITION_FAILED - unknown delivery tag x 的问题
该问题经过一番试验,发现是消费者(consumer)程序逻辑错误导致:在消息处理的回调函数中多次ack或nack。
开启Python日志,并在回调函数中两次ack得到如下信息:
F:\software\Python35\python.exe F:/project/Python/forwardShippingInfo/test_rabbitmq.py
2017-02-07 15:46:49,678 - pika.adapters.select_connection - DEBUG - Using SelectPoller
2017-02-07 15:46:49,679 - pika.callback - DEBUG - Added: {'callback': <bound method _CallbackResult.set_value_once of <pika.adapters.blocking_connection._CallbackResult object at 0x000000000338B348>>, 'arguments': None, 'one_shot': False, 'only': None}
2017-02-07 15:46:49,679 - pika.callback - DEBUG - Added: {'callback': <bound method _CallbackResult.set_value_once of <pika.adapters.blocking_connection._CallbackResult object at 0x0000000003287C08>>, 'arguments': None, 'one_shot': False, 'only': None}
2017-02-07 15:46:49,679 - pika.callback - DEBUG - Added: {'callback': <bound method _CallbackResult.set_value_once of <pika.adapters.blocking_connection._CallbackResult object at 0x0000000003AE4488>>, 'arguments': None, 'one_shot': False, 'only': None}
2017-02-07 15:46:49,679 - pika.callback - DEBUG - Added: {'callback': <bound method Connection._on_connection_start of <pika.adapters.select_connection.SelectConnection object at 0x0000000003A760B8>>, 'arguments': None, 'one_shot': True, 'only': None, 'calls': 1}
2017-02-07 15:46:49,688 - pika.adapters.base_connection - INFO - Connecting to 192.168.200.230:5672
2017-02-07 15:46:49,704 - pika.callback - DEBUG - Processing 0:Connection.Start
2017-02-07 15:46:49,704 - pika.callback - DEBUG - Processing use of oneshot callback
2017-02-07 15:46:49,705 - pika.callback - DEBUG - 0 registered uses left
2017-02-07 15:46:49,705 - pika.callback - DEBUG - Removing callback #0: {'callback': <bound method Connection._on_connection_start of <pika.adapters.select_connection.SelectConnection object at 0x0000000003A760B8>>, 'arguments': None, 'one_shot': True, 'only': None, 'calls': 0}
2017-02-07 15:46:49,705 - pika.callback - DEBUG - Calling <bound method Connection._on_connection_start of <pika.adapters.select_connection.SelectConnection object at 0x0000000003A760B8>> for "0:Connection.Start"
2017-02-07 15:46:49,705 - pika.callback - DEBUG - Added: {'callback': <bound method Connection._on_connection_tune of <pika.adapters.select_connection.SelectConnection object at 0x0000000003A760B8>>, 'arguments': None, 'one_shot': True, 'only': None, 'calls': 1}
2017-02-07 15:46:49,709 - pika.callback - DEBUG - Processing 0:Connection.Tune
2017-02-07 15:46:49,709 - pika.callback - DEBUG - Processing use of oneshot callback
2017-02-07 15:46:49,709 - pika.callback - DEBUG - 0 registered uses left
2017-02-07 15:46:49,709 - pika.callback - DEBUG - Removing callback #0: {'callback': <bound method Connection._on_connection_tune of <pika.adapters.select_connection.SelectConnection object at 0x0000000003A760B8>>, 'arguments': None, 'one_shot': True, 'only': None, 'calls': 0}
2017-02-07 15:46:49,709 - pika.callback - DEBUG - Calling <bound method Connection._on_connection_tune of <pika.adapters.select_connection.SelectConnection object at 0x0000000003A760B8>> for "0:Connection.Tune"
2017-02-07 15:46:49,710 - pika.connection - DEBUG - Creating a HeartbeatChecker: 600
2017-02-07 15:46:49,710 - pika.callback - DEBUG - Added: {'callback': <bound method Connection._on_connection_open of <pika.adapters.select_connection.SelectConnection object at 0x0000000003A760B8>>, 'arguments': None, 'one_shot': True, 'only': None, 'calls': 1}
2017-02-07 15:46:49,713 - pika.callback - DEBUG - Processing 0:Connection.OpenOk
2017-02-07 15:46:49,713 - pika.callback - DEBUG - Processing use of oneshot callback
2017-02-07 15:46:49,713 - pika.callback - DEBUG - 0 registered uses left
2017-02-07 15:46:49,713 - pika.callback - DEBUG - Removing callback #0: {'callback': <bound method Connection._on_connection_open of <pika.adapters.select_connection.SelectConnection object at 0x0000000003A760B8>>, 'arguments': None, 'one_shot': True, 'only': None, 'calls': 0}
2017-02-07 15:46:49,713 - pika.callback - DEBUG - Calling <bound method Connection._on_connection_open of <pika.adapters.select_connection.SelectConnection object at 0x0000000003A760B8>> for "0:Connection.OpenOk"
2017-02-07 15:46:49,713 - pika.callback - DEBUG - Added: {'callback': <bound method Connection._on_connection_closed of <pika.adapters.select_connection.SelectConnection object at 0x0000000003A760B8>>, 'arguments': None, 'one_shot': True, 'only': None, 'calls': 1}
2017-02-07 15:46:49,713 - pika.callback - DEBUG - Processing 0:_on_connection_open
2017-02-07 15:46:49,713 - pika.callback - DEBUG - Calling <bound method _CallbackResult.set_value_once of <pika.adapters.blocking_connection._CallbackResult object at 0x0000000003287C08>> for "0:_on_connection_open"
2017-02-07 15:46:49,714 - pika.connection - DEBUG - Creating channel 1
2017-02-07 15:46:49,714 - pika.callback - DEBUG - Added: {'callback': <bound method Connection._on_channel_cleanup of <pika.adapters.select_connection.SelectConnection object at 0x0000000003A760B8>>, 'arguments': None, 'one_shot': True, 'only': <pika.channel.Channel object at 0x0000000003AD8BA8>, 'calls': 1}
2017-02-07 15:46:49,714 - pika.callback - DEBUG - Added: {'callback': <bound method Channel._on_getempty of <pika.channel.Channel object at 0x0000000003AD8BA8>>, 'arguments': None, 'one_shot': False, 'only': None}
2017-02-07 15:46:49,714 - pika.callback - DEBUG - Added: {'callback': <bound method Channel._on_cancel of <pika.channel.Channel object at 0x0000000003AD8BA8>>, 'arguments': None, 'one_shot': False, 'only': None}
2017-02-07 15:46:49,714 - pika.callback - DEBUG - Added: {'callback': <bound method Channel._on_flow of <pika.channel.Channel object at 0x0000000003AD8BA8>>, 'arguments': None, 'one_shot': False, 'only': None}
2017-02-07 15:46:49,714 - pika.callback - DEBUG - Added: {'callback': <bound method Channel._on_close of <pika.channel.Channel object at 0x0000000003AD8BA8>>, 'arguments': None, 'one_shot': True, 'only': None, 'calls': 1}
2017-02-07 15:46:49,714 - pika.channel - DEBUG - Adding in on_synchronous_complete callback
2017-02-07 15:46:49,714 - pika.callback - DEBUG - Added: {'callback': <bound method Channel._on_synchronous_complete of <pika.channel.Channel object at 0x0000000003AD8BA8>>, 'arguments': None, 'one_shot': True, 'only': None, 'calls': 1}
2017-02-07 15:46:49,714 - pika.channel - DEBUG - Adding passed in callback
2017-02-07 15:46:49,715 - pika.callback - DEBUG - Added: {'callback': <bound method Channel._on_openok of <pika.channel.Channel object at 0x0000000003AD8BA8>>, 'arguments': None, 'one_shot': True, 'only': None, 'calls': 1}
2017-02-07 15:46:49,715 - pika.callback - DEBUG - Added: {'callback': <bound method BlockingChannel._on_consumer_cancelled_by_broker of <pika.adapters.blocking_connection.BlockingChannel object at 0x0000000003AF65F8>>, 'arguments': None, 'one_shot': False, 'only': None}
2017-02-07 15:46:49,715 - pika.callback - DEBUG - Added: {'callback': <bound method _CallbackResult.signal_once of <pika.adapters.blocking_connection._CallbackResult object at 0x0000000003AE7E88>>, 'arguments': None, 'one_shot': False, 'only': None}
2017-02-07 15:46:49,715 - pika.callback - DEBUG - Added: {'callback': <bound method _CallbackResult.set_value_once of <pika.adapters.blocking_connection._CallbackResult object at 0x0000000003AE7D08>>, 'arguments': None, 'one_shot': True, 'only': None, 'calls': 1}
2017-02-07 15:46:49,715 - pika.callback - DEBUG - Added: {'callback': <bound method _CallbackResult.set_value_once of <pika.adapters.blocking_connection._CallbackResult object at 0x0000000003AE7EC8>>, 'arguments': None, 'one_shot': False, 'only': None}
2017-02-07 15:46:49,717 - pika.adapters.blocking_connection - INFO - Created channel=1
2017-02-07 15:46:49,718 - pika.callback - DEBUG - Processing 1:Channel.OpenOk
2017-02-07 15:46:49,718 - pika.callback - DEBUG - Processing use of oneshot callback
2017-02-07 15:46:49,718 - pika.callback - DEBUG - 0 registered uses left
2017-02-07 15:46:49,718 - pika.callback - DEBUG - Removing callback #0: {'callback': <bound method Channel._on_synchronous_complete of <pika.channel.Channel object at 0x0000000003AD8BA8>>, 'arguments': None, 'one_shot': True, 'only': None, 'calls': 0}
2017-02-07 15:46:49,719 - pika.callback - DEBUG - Processing use of oneshot callback
2017-02-07 15:46:49,719 - pika.callback - DEBUG - 0 registered uses left
2017-02-07 15:46:49,719 - pika.callback - DEBUG - Removing callback #0: {'callback': <bound method Channel._on_openok of <pika.channel.Channel object at 0x0000000003AD8BA8>>, 'arguments': None, 'one_shot': True, 'only': None, 'calls': 0}
2017-02-07 15:46:49,719 - pika.callback - DEBUG - Calling <bound method Channel._on_synchronous_complete of <pika.channel.Channel object at 0x0000000003AD8BA8>> for "1:Channel.OpenOk"
2017-02-07 15:46:49,719 - pika.channel - DEBUG - 0 blocked frames
2017-02-07 15:46:49,719 - pika.callback - DEBUG - Calling <bound method Channel._on_openok of <pika.channel.Channel object at 0x0000000003AD8BA8>> for "1:Channel.OpenOk"
2017-02-07 15:46:49,719 - pika.channel - DEBUG - Adding in on_synchronous_complete callback
2017-02-07 15:46:49,719 - pika.callback - DEBUG - Added: {'callback': <bound method Channel._on_synchronous_complete of <pika.channel.Channel object at 0x0000000003AD8BA8>>, 'arguments': None, 'one_shot': True, 'only': None, 'calls': 1}
2017-02-07 15:46:49,719 - pika.channel - DEBUG - Adding passed in callback
2017-02-07 15:46:49,720 - pika.callback - DEBUG - Added: {'callback': <bound method _CallbackResult.signal_once of <pika.adapters.blocking_connection._CallbackResult object at 0x0000000003A6E208>>, 'arguments': None, 'one_shot': True, 'only': None, 'calls': 1}
2017-02-07 15:46:49,721 - pika.callback - DEBUG - Processing 1:Basic.QosOk
2017-02-07 15:46:49,721 - pika.callback - DEBUG - Processing use of oneshot callback
2017-02-07 15:46:49,722 - pika.callback - DEBUG - 0 registered uses left
2017-02-07 15:46:49,722 - pika.callback - DEBUG - Removing callback #0: {'callback': <bound method Channel._on_synchronous_complete of <pika.channel.Channel object at 0x0000000003AD8BA8>>, 'arguments': None, 'one_shot': True, 'only': None, 'calls': 0}
2017-02-07 15:46:49,722 - pika.callback - DEBUG - Processing use of oneshot callback
2017-02-07 15:46:49,722 - pika.callback - DEBUG - 0 registered uses left
2017-02-07 15:46:49,722 - pika.callback - DEBUG - Removing callback #0: {'callback': <bound method _CallbackResult.signal_once of <pika.adapters.blocking_connection._CallbackResult object at 0x0000000003A6E208>>, 'arguments': None, 'one_shot': True, 'only': None, 'calls': 0}
2017-02-07 15:46:49,722 - pika.callback - DEBUG - Calling <bound method Channel._on_synchronous_complete of <pika.channel.Channel object at 0x0000000003AD8BA8>> for "1:Basic.QosOk"
2017-02-07 15:46:49,722 - pika.channel - DEBUG - 0 blocked frames
2017-02-07 15:46:49,722 - pika.callback - DEBUG - Calling <bound method _CallbackResult.signal_once of <pika.adapters.blocking_connection._CallbackResult object at 0x0000000003A6E208>> for "1:Basic.QosOk"
2017-02-07 15:46:49,722 - pika.channel - DEBUG - Adding in on_synchronous_complete callback
2017-02-07 15:46:49,723 - pika.callback - DEBUG - Added: {'callback': <bound method Channel._on_synchronous_complete of <pika.channel.Channel object at 0x0000000003AD8BA8>>, 'arguments': {'consumer_tag': '2017-02-07 15:46:49 -> 9540'}, 'one_shot': True, 'only': None, 'calls': 1}
2017-02-07 15:46:49,723 - pika.channel - DEBUG - Adding passed in callback
2017-02-07 15:46:49,723 - pika.callback - DEBUG - Added: {'callback': <bound method Channel._on_eventok of <pika.channel.Channel object at 0x0000000003AD8BA8>>, 'arguments': {'consumer_tag': '2017-02-07 15:46:49 -> 9540'}, 'one_shot': True, 'only': None, 'calls': 1}
2017-02-07 15:46:49,727 - pika.callback - DEBUG - Processing 1:Basic.ConsumeOk
2017-02-07 15:46:49,727 - pika.callback - DEBUG - Processing use of oneshot callback
2017-02-07 15:46:49,727 - pika.callback - DEBUG - 0 registered uses left
2017-02-07 15:46:49,727 - pika.callback - DEBUG - Comparing {'consumer_tag': '2017-02-07 15:46:49 -> 9540'} to {'consumer_tag': '2017-02-07 15:46:49 -> 9540'}
2017-02-07 15:46:49,727 - pika.callback - DEBUG - Removing callback #1: {'callback': <bound method Channel._on_synchronous_complete of <pika.channel.Channel object at 0x0000000003AD8BA8>>, 'arguments': {'consumer_tag': '2017-02-07 15:46:49 -> 9540'}, 'one_shot': True, 'only': None, 'calls': 0}
2017-02-07 15:46:49,727 - pika.callback - DEBUG - Processing use of oneshot callback
2017-02-07 15:46:49,727 - pika.callback - DEBUG - 0 registered uses left
2017-02-07 15:46:49,728 - pika.callback - DEBUG - Comparing {'consumer_tag': '2017-02-07 15:46:49 -> 9540'} to {'consumer_tag': '2017-02-07 15:46:49 -> 9540'}
2017-02-07 15:46:49,728 - pika.callback - DEBUG - Removing callback #1: {'callback': <bound method Channel._on_eventok of <pika.channel.Channel object at 0x0000000003AD8BA8>>, 'arguments': {'consumer_tag': '2017-02-07 15:46:49 -> 9540'}, 'one_shot': True, 'only': None, 'calls': 0}
2017-02-07 15:46:49,728 - pika.callback - DEBUG - Calling <bound method _CallbackResult.signal_once of <pika.adapters.blocking_connection._CallbackResult object at 0x0000000003AE7E88>> for "1:Basic.ConsumeOk"
2017-02-07 15:46:49,728 - pika.callback - DEBUG - Calling <bound method Channel._on_synchronous_complete of <pika.channel.Channel object at 0x0000000003AD8BA8>> for "1:Basic.ConsumeOk"
2017-02-07 15:46:49,728 - pika.channel - DEBUG - 0 blocked frames
2017-02-07 15:46:49,728 - pika.callback - DEBUG - Calling <bound method Channel._on_eventok of <pika.channel.Channel object at 0x0000000003AD8BA8>> for "1:Basic.ConsumeOk"
2017-02-07 15:46:49,728 - pika.channel - DEBUG - Discarding frame <METHOD(['channel_number=1', 'frame_type=1', "method=<Basic.ConsumeOk(['consumer_tag=2017-02-07 15:46:49 -> 9540'])>"])>
2017-02-07 15:47:14,731 - pika.callback - DEBUG - Processing 1:Channel.Close
2017-02-07 15:47:14,731 - pika.callback - DEBUG - Processing use of oneshot callback
2017-02-07 15:47:14,731 - pika.callback - DEBUG - 0 registered uses left
2017-02-07 15:47:14,731 - pika.callback - DEBUG - Removing callback #0: {'callback': <bound method Channel._on_close of <pika.channel.Channel object at 0x0000000003AD8BA8>>, 'arguments': None, 'one_shot': True, 'only': None, 'calls': 0}
2017-02-07 15:47:14,733 - pika.callback - DEBUG - Processing use of oneshot callback
2017-02-07 15:47:14,733 - pika.callback - DEBUG - 0 registered uses left
2017-02-07 15:47:14,734 - pika.callback - DEBUG - Removing callback #0: {'callback': <bound method _CallbackResult.set_value_once of <pika.adapters.blocking_connection._CallbackResult object at 0x0000000003AE7D08>>, 'arguments': None, 'one_shot': True, 'only': None, 'calls': 0}
2017-02-07 15:47:14,734 - pika.callback - DEBUG - Calling <bound method Channel._on_close of <pika.channel.Channel object at 0x0000000003AD8BA8>> for "1:Channel.Close"
2017-02-07 15:47:14,734 - pika.channel - INFO - <METHOD(['channel_number=1', 'frame_type=1', "method=<Channel.Close(['class_id=60', 'method_id=80', 'reply_code=406', 'reply_text=PRECONDITION_FAILED - unknown delivery tag 1'])>"])>
2017-02-07 15:47:14,734 - pika.channel - WARNING - Received remote Channel.Close (406): PRECONDITION_FAILED - unknown delivery tag 1
2017-02-07 15:47:14,734 - pika.callback - DEBUG - Processing 1:_on_channel_cleanup
2017-02-07 15:47:14,734 - pika.callback - DEBUG - Processing use of oneshot callback
2017-02-07 15:47:14,734 - pika.callback - DEBUG - 0 registered uses left
2017-02-07 15:47:14,735 - pika.callback - DEBUG - Removing callback #0: {'callback': <bound method Connection._on_channel_cleanup of <pika.adapters.select_connection.SelectConnection object at 0x0000000003A760B8>>, 'arguments': None, 'one_shot': True, 'only': <pika.channel.Channel object at 0x0000000003AD8BA8>, 'calls': 0}
2017-02-07 15:47:14,735 - pika.callback - DEBUG - Calling <bound method Connection._on_channel_cleanup of <pika.adapters.select_connection.SelectConnection object at 0x0000000003A760B8>> for "1:_on_channel_cleanup"
2017-02-07 15:47:14,735 - pika.connection - DEBUG - Removed channel 1
2017-02-07 15:47:14,735 - pika.callback - DEBUG - Clearing out '1' from the stack
2017-02-07 15:47:14,735 - pika.callback - DEBUG - Calling <bound method _CallbackResult.set_value_once of <pika.adapters.blocking_connection._CallbackResult object at 0x0000000003AE7D08>> for "1:Channel.Close"
由unknown delivery tag很容易想到回调函数中唯二使用delivery tag的方法(ack/nack),对代码进行review找到逻辑错误,得以解决。
可以看到这种情况下,连接存在,信道消失发生的原因。
当然还有一些情况会发生这种情况,这里只是说明下其中的一个情况,及其问题的查找方法。
RabbitMQ 信道(channel)挂掉,但连接仍然存在,同时出现错误:Received remote Channel.Close (406): PRECONDITION_FAILED - unknown delivery tag x 的问题的更多相关文章
- protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - unknown delivery tag 2, class-id=60, method-id=80)
Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; reason: {#method<channel.c ...
- RabbitMQ(六)远程连接
RabbitMQ(六)远程连接 默认情况下,rabbitmq使用`guest`来连接本地(localhost)的server,当需要远程连接时,就会失效. "guest" user ...
- RabbitMQ开启SSL与SpringBoot连接测试
楔子 近期公司程序被安全扫描出 远程主机允许明文身份验证 中风险漏洞,查了下修复方案,RabbitMQ官方提供了SSL连接方式,而且 SpringBoot AMQP 也支持 SSL 连接.以下将配置R ...
- win 10 远程连接出现 "由于安全设置错误, 客户端无法连接到远程计算机. 确定你已登录到网络后.” 错误
win 10 远程连接出现 "由于安全设置错误, 客户端无法连接到远程计算机. 确定你已登录到网络后.” 错误 解决方法如下: Step 1:打开"本地安全策略"- Wi ...
- flume 报File Channel transaction capacity cannot be greater than the capacity of the channel capacity错误
今天在部署flume集群时,在启动collector服务器没报错,启动agent服务器报错: File Channel transaction capacity cannot be greater t ...
- 解决SQL Server管理器无法连接远程数据库Error: 1326错误
解决SQL Server管理器无法连接远程数据库Error: 1326错误 我们在在使用SQL Server时都会遇到使用SQL Server Management Studio无法连接远程数据库实例 ...
- mysql数据库在Navicat Premium连接的时候出现1862错误
navicat连接打开时报1862的错误, 很就没有连接mysql看看了,今天连接的时候发现本机的mysql链接不上了,在cmd中执行动作的时候也会叫你去set password,做设置密码的动作时会 ...
- 20180726 - Windows 10 Pro 下远程桌面连接提示“出现身份验证错误”
问题:Windows 10 Pro 下远程桌面连接提示“出现身份验证错误” [Window Title]远程桌面连接 [Content]出现身份验证错误.要求的函数不受支持 远程计算机: 192.16 ...
- WARN conf.FlumeConfiguration: Could not configure sink sink1 due to: No channel configured for sink: sink1 org.apache.flume.conf.ConfigurationException: No channel configured for sink: sink1
1.错误如下所示,启动flume采集文件到hdfs案例的时候,出现如下所示的错误: 大概是说No channel configured for sink,所以应该是sink哪里配置出现了错误,百度了一 ...
随机推荐
- Android反射机制:手把手教你实现反射
什么是反射机制? JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称 ...
- ng-grid
请查看官网:http://angular-ui.github.io/ui-grid/ 简单的使用: 总的来说我们 1.需要引入ng-grid-1.3.2.js 2.在html页面需要加入 class ...
- Android之第三方平台实现QQ登录和QQ分享
目前大多数APP都包含了第三方平台的登录,特别是QQ和微信,这篇博客主要讲的是如何实现QQ第三方平台实现QQ登录和分享功能,功能包含: 登录授权登录获取用户信息(昵称,头像,地址等) QQ分享给好友 ...
- uva10689矩阵快速幂
#include<map> #include<set> #include<cmath> #include<queue> #include<stac ...
- sgu 142. Keyword 暴力,hash 难度:0
142. Keyword time limit per test: 0.5 sec. memory limit per test: 16384 KB Kevin has invented a new ...
- python 发送QQ邮件的小例子
首先QQ邮件用第三方客户端发送要申请验证码.而不是QQ的密码. 授权码就是你接下来登录要使用的密码 那么剩下的工作就很简单了.附简单代码如下: #coding:utf-8 import smtplib ...
- Type Script在Visual Studio 2013中的问题汇总(持续更新…)
TypeScript在vs2012下的问题 TypeScript对VS2012支持度比较低,建议升级为VS2013版本以上. 在VS2013中无法创建TypeScript项目 VS2013默认不支持T ...
- xml生成javabean(zhuan)
package com.dom4j; import java.io.File;import java.io.FileWriter;import java.io.IOException;import j ...
- plsql的快速生成sql语句设置
单 单击tool(工具)->的preferences(首选项) ,进入到首选项页面 在点击user interface 的editor下的autoreplace 的edit按钮 ...
- Leetcode 1021. Remove Outermost Parentheses
括号匹配想到用栈来做: class Solution: def removeOuterParentheses(self, S: str) -> str: size=len(S) if size= ...