RabbitMQ 管理 API 调用失败:HTTP 500:内部服务器错误

suv*_*i3V 6 python rabbitmq celery

我使用 Celery Flower 和 RabbitMQ 作为消息代理。然而我:遇到了令人讨厌的错误

错误 - RabbitMQ 管理 API 调用失败:HTTP 500:内部服务器错误

每次我尝试访问 RabbitMQ 管理界面(http://localhost:15672/#/queues)或 Celery Broker(http://localhost:5555/broker)上的 RabbitMQ 队列时。

这是详细的日志信息:

=错误报告====2017年1月15日::23:12:19 ===网络机器错误:path =“/ api /queues /%2F”{错误,{错误,function_clause,[{mochijson2,json_encode_string_unicode, [{错误,[],<<166,65,92,180,0,0,0,0,0>>}, {编码器,null,false}, """], [{文件,"src/mochijson2. erl"},{line,274}]}, {mochijson2,'-json_encode_proplist/2-fun-0-',3, [{file,"src/mochijson2.erl"},{line,198}]}, {列表,foldl,3,[{文件,“lists.erl”},{line,1248}]},{mochijson2,json_encode_proplist,2,[{文件,“src/mochijson2.erl”},{line,202 }]}, {mochijson2,'-json_encode_proplist/2-fun-0-',3, [{file,"src/mochijson2.erl"},{line,199}]}, {列表,foldl,3,[ {file,"lists.erl"},{line,1248}]}, {mochijson2,json_encode_proplist,2, [{file,"src/mochijson2.erl"},{line,202}]}, {mochijson2,' -json_encode_array/2-fun-0-',3, [{file,"src/mochijson2.erl"},{line,189}]}]}}

RabbitMQ Web 管理给了我:

得到响应代码 500,正文为 {"error":"内部服务器错误","re​​ason":"{error,{error,function_clause,\n [{mochijson2,json_encode_string_unicode,\n [{error,[],<<166 ,65,92,180,0,0,0,0,0>>},\n {编码器,null,false},\n "\""],\n [{文件,"src/mochijson2.erl"} ,{line,274}]},\n {mochijson2,'-json_encode_proplist/2-fun-0-',3,\n [{file,"src/mochijson2.erl"},{line,198}]} ,\n {lists,foldl,3,[{file,"lists.erl"},{line,1248}]},\n {mochijson2,json_encode_proplist,2,\n [{file,"src/mochijson2.erl "},{line,202}]},\n {mochijson2,'-json_encode_proplist/2-fun-0-',3,\n [{file,"src/mochijson2.erl"},{line,199} ]},\n {列表,foldl,3,[{文件,"lists.erl"},{line,1248}]},\n {mochijson2,json_encode_proplist,2,\n [{文件,"src/mochijson2 .erl"},{line,202}]},\n {mochijson2,'-json_encode_array/2-fun-0-',3,\n [{文件,"src/mochijson2.erl"},{line, 189}]}]}}\n"}

我在用:

  • 乌班图14.04
  • Python 2.7.6
  • 花0.9.1
  • 芹菜4.0.2
  • 兔子MQ 3.6.6
  • Erlang/OTP 19

RabbitMQ 管理插件已启用(rabbitmq-plugins启用rabbitmq_management)。

这是rabbitmqctl状态的输出:

[{pid,28609}、{running_applications、[{rabbitmq_management、"RabbitMQ 管理控制台"、"3.6.6"}、{amqp_client、"RabbitMQ AMQP 客户端"、"3.6.6"}、{rabbitmq_management_agent、"RabbitMQ 管理代理","3.6.6"}, {rabbitmq_web_dispatch,"RabbitMQ Web 调度程序","3.6.6"}, {rabbit,"RabbitMQ","3.6.6"}, {os_mon,"CPO CXC 138 46"," 2.4.1"}, {webmachine,"webmachine","1.10.3"}, {mochiweb,"MochiMedia Web 服务器","2.13.1"}, {ssl,"Erlang/OTP SSL 应用程序","8.1" }, {public_key,"公钥基础设施","1.3"}, {crypto,"CRYPTO","3.7.2"}, {rabbit_common,[],"3.6.6"}, {xmerl,"XML 解析器" ,"1.3.12"}, {asn1,"Erlang ASN1 编译器版本 4.0.4","4.0.4"}, {syntax_tools,"语法工具","2.1.1"}, {mnesia,"MNESIA CXC 138 12","4.14.2"}, {编译器,"ERTS CXC 138 10","7.0.3"}, {ranch,"TCP 协议的套接字接受器池。","1.2.1"}, {inets ,"INETS CXC 138 49","6.3.4"}, {sasl,"SASL CXC 138 11","3.0.2"}, {stdlib,"ERTS CXC 138 10","3.2"}, {内核, "ERTS CXC 138 10","5.1.1"}]}, {os,{unix,linux}}, {erlang_version, "Erlang/OTP 19 [erts-8.2] [来源] [64 位] [smp: 4:4] [异步线程:64] [内核轮询:true]\n"}, {内存, [{总计,112070616}, {connection_readers,471152}, {connection_writers,171664}, {connection_channels,494680} , {connection_other,407232}, {queue_procs,534792}, {queue_slave_procs,0}, {plugins,2121728}, {other_proc,12017232}, {mnesia,93584}, {mgmt_db,5114688}, {msg_index,49304}, { other_ets,1902144}、{binary,52694768}、{code,24783822}、{atom,1033401}、{other_system,10180425}]}、{alarms,[]}、{listeners,[{clustering,25672,":: "},{amqp,5672,"::"}]}, {vm_memory_high_watermark,0.4}, {vm_memory_limit,6691391078}, {disk_free_limit,50000000}, {disk_free,59039645696}, {file_descriptors, [{total_limit,3996}, {total_used,23}, {sockets_limit,3594}, {sockets_used,20}]}, {进程,[{limit,1048576},{used,454}]}, {run_queue,0}, {uptime,2498}, {内核,{net_ticktime,60}}]

这是我运行 Celery 的方式:

启动 3 个芹菜工人:

celery worker -A celeryapp --config celeryconfig --workdir /proj -l DEBUG --soft-time-limit=3500 --time-limit=3600 --autoscale=2,1 -S /proj/states.db -s /proj/celerybeat-schedule.db -f /proj/logs/celery_worker_1_%n%I.log --pidfile /tmp/celery_w1.pid -n worker1@%d
celery worker -A celeryapp --config celeryconfig --workdir /proj -l DEBUG --soft-time-limit=3500 --time-limit=3600 --autoscale=2,1 -S /proj/states.db -s /proj/celerybeat-schedule.db -f /proj/logs/celery_worker_2_%n%I.log --pidfile /tmp/celery_w2.pid -n worker2@%d
celery worker -A celeryapp --config celeryconfig --workdir /proj -l DEBUG --soft-time-limit=3500 --time-limit=3600 --autoscale=2,1 -S /proj/states.db -s /proj/celerybeat-schedule.db -f /proj/logs/celery_worker_3_%n%I.log --pidfile /tmp/celery_w3.pid -n worker3@%d
Run Code Online (Sandbox Code Playgroud)

开始芹菜节拍:

celery beat -A celeryapp --config celeryconfig --workdir /proj -l DEBUG -s /proj/celerybeat-schedule.db -f /proj/logs/celery_%n%I.log --pidfile /tmp/celery.pid
Run Code Online (Sandbox Code Playgroud)

开始芹菜花:

celery flower -A celeryapp --workdir=/proj/ --broker=amqp://guest:guest@localhost:5672// --broker-api=http://guest:guest@localhost:15672/api/ --db=/proj/flower.db --logging=debug --basic-auth=guest:guest
Run Code Online (Sandbox Code Playgroud)

我在 RabbitMQ 的 Github issues 中发布了这个问题,但被拒绝了

Gab*_*ele 0

您的 Elang 版本有点旧。

使用最新版本更新它,管理 UI 需要新的 Erlang 版本

https://www.erlang-solutions.com/resources/download.html

wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb
sudo dpkg -i erlang-solutions_1.0_all.deb
sudo apt-get update
sudo apt-get install erlang
Run Code Online (Sandbox Code Playgroud)