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哪里配置出现了错误,百度了一 ...
随机推荐
- 雷林鹏分享:Ruby 数组(Array)
Ruby 数组(Array) Ruby 数组是任何对象的有序的.整数索引的集合.数组中的每个元素都与一个索引相关,并可通过索引进行获取. 数组的索引从 0 开始,这与 C 或 Java 中一样.一个负 ...
- Mybatis出现参数错误Parameter 'cateCode_search' not found. Available parameters are [3, 2, 1, 0, param1, param2, 5, param3, 4, param4, param5, param6]
1.参数改为序号 2.在mybatis借口上加@Param注解
- bzoj3223: Tyvj 1729 文艺平衡树 splay裸题
splay区间翻转即可 /************************************************************** Problem: 3223 User: walf ...
- REST风格
1)Representational State Transfer,表述性状态转移,是一种软件架构风格 2)实现步骤 第一步:修改URL 例:http://localhost:8090/SMBMS_C ...
- CS231n课程笔记翻译5:反向传播笔记
译者注:本文智能单元首发,译自斯坦福CS231n课程笔记Backprop Note,课程教师Andrej Karpathy授权翻译.本篇教程由杜客翻译完成,堃堃和巩子嘉进行校对修改.译文含公式和代码, ...
- python实践报错:SyntaxError: Non-ASCII character
报错: File "C:\001myWorkspace\001myWork\workspace2\MyFirstPython\src\demo4\demo4-2.py", line ...
- nginx配置文件的性能优化
1.nginx进程数,建议按照cpu数目来指定,一般跟cpu核数相同或为它的倍数.worker_processes 8; 2.为每个进程分配cpu,上例中将8个进程分配到8个cpu,当然可以写多个,或 ...
- I.MX6 Linux U-boot 环境变量解析
/********************************************************************************** * I.MX6 Linux U- ...
- 老爷机iphone4s 9.2.1降级6.1.3
原帖见威锋网 sunnyskyline 2017年1月10日发的贴. 本文中加了一些我自己的情况,也是一知半解,抛砖引玉吧. 首先进行备份.进行备份.进行备份. 感谢大神@极端阴险 感谢@shuaig ...
- Oracle密码中含有特殊字符时exp,imp的使用
今天通过exp迁移Oracle 数据,由于密码含有很有很多特殊字符,弄了好久,都没成功,后发在网上找到方法. 1 exp用法Linux 下(密码用一对双引号, 整体userid用对单引号括住)exp ...