该问题经过一番试验,发现是消费者(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 的问题的更多相关文章

  1. 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 ...

  2. RabbitMQ(六)远程连接

    RabbitMQ(六)远程连接 默认情况下,rabbitmq使用`guest`来连接本地(localhost)的server,当需要远程连接时,就会失效. "guest" user ...

  3. RabbitMQ开启SSL与SpringBoot连接测试

    楔子 近期公司程序被安全扫描出 远程主机允许明文身份验证 中风险漏洞,查了下修复方案,RabbitMQ官方提供了SSL连接方式,而且 SpringBoot AMQP 也支持 SSL 连接.以下将配置R ...

  4. win 10 远程连接出现 "由于安全设置错误, 客户端无法连接到远程计算机. 确定你已登录到网络后.” 错误

    win 10 远程连接出现 "由于安全设置错误, 客户端无法连接到远程计算机. 确定你已登录到网络后.” 错误 解决方法如下: Step 1:打开"本地安全策略"- Wi ...

  5. 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 ...

  6. 解决SQL Server管理器无法连接远程数据库Error: 1326错误

    解决SQL Server管理器无法连接远程数据库Error: 1326错误 我们在在使用SQL Server时都会遇到使用SQL Server Management Studio无法连接远程数据库实例 ...

  7. mysql数据库在Navicat Premium连接的时候出现1862错误

    navicat连接打开时报1862的错误, 很就没有连接mysql看看了,今天连接的时候发现本机的mysql链接不上了,在cmd中执行动作的时候也会叫你去set password,做设置密码的动作时会 ...

  8. 20180726 - Windows 10 Pro 下远程桌面连接提示“出现身份验证错误”

    问题:Windows 10 Pro 下远程桌面连接提示“出现身份验证错误” [Window Title]远程桌面连接 [Content]出现身份验证错误.要求的函数不受支持 远程计算机: 192.16 ...

  9. 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哪里配置出现了错误,百度了一 ...

随机推荐

  1. HashMap put方法

    HashMap的put方法执行过程可以通过下图来理解,自己有兴趣可以去对比源码更清楚地研究学习. ①.判断键值对数组table[i]是否为空或为null,否则执行resize()进行扩容: ②.根据键 ...

  2. charles抓取https中出现unknow

    http正常抓包,https则出现unknown 1.安装证书 Help->SSL Proxying->Install Charles Root Certificate 但是!!!装完并没 ...

  3. [转载]Huffman编码压缩算法

    转自http://coolshell.cn/articles/7459.html 前两天发布那个rsync算法后,想看看数据压缩的算法,知道一个经典的压缩算法Huffman算法.相信大家应该听说过 D ...

  4. 修复Ubuntu下XTerm不能正常显示中文字体的问题

    打开/etc/X11/app-defaults/XTerm在最后添加如下代码: Xft.dpi:96         xpdf.title: PDF         XTerm*faceSize: 1 ...

  5. qt忙等与非忙等

    非忙等: void delay(int msec) { QTime end = QTime::currentTime().addMSecs(msec); while( QTime::currentTi ...

  6. HDU 1495 非常可乐 bfs 难度:1

    http://acm.hdu.edu.cn/showproblem.php?pid=1495 第三个杯子的盛水量可由前两个杯子得到,而前两个杯子状态总数在100*100以内,穷举可实现 #includ ...

  7. Chrome浏览器插件开发-关于案例

    前言 关于案例 下一章 版本更新提示案例 一.前言 上章我们提到过开发一个插件所需要的步骤: Chrome浏览器插件开发-淘宝自动登录 并且还介绍了如何在页面上面注入脚本代码,并且成功的完成用户名和密 ...

  8. 表单验证jq.validate.js

    源代码--demo Validate:function(){ var me=this; var $form = $('#form'); //添加自定义方法: 同时验证手机和座机电话    jQuery ...

  9. OMAP4之DSP核(Tesla)软件开发学习(二)Linux内核驱动支持OMAP4 DSP核

    注:必须是Linux/arm 3.0以上内核才支持RPMSG,在此使用的是.config - Linux/arm 3.0.31 Kernel Configuration.(soure code fro ...

  10. 6-18 Two Stacks In One Array(20 分)

    Write routines to implement two stacks using only one array. Your stack routines should not declare ...