实际项目中有时会遇到消息丢失问题,订阅方反馈没订阅到,发送方反馈已经发送了。需要直接在RabbitMQ中看数据,这时可以采用RabbitMQ 的trace插件进行消息查看。
首先需要进入rabbitmq安装目录:

确认rabbitmqctl正常

  1. [root@master rabbitmq]# rabbitmqctl status
  2. Status of node rabbit@master ...
  3. [{pid,11428},
  4. {running_applications,
  5. [{rabbitmq_management,"RabbitMQ Management Console","3.3.5"},
  6. {rabbitmq_web_dispatch,"RabbitMQ Web Dispatcher","3.3.5"},
  7. {webmachine,"webmachine","1.10.3-rmq3.3.5-gite9359c7"},
  8. {mochiweb,"MochiMedia Web Server","2.7.0-rmq3.3.5-git680dba8"},
  9. {rabbitmq_management_agent,"RabbitMQ Management Agent","3.3.5"},
  10. {rabbit,"RabbitMQ","3.3.5"},
  11. {mnesia,"MNESIA CXC 138 12","4.11"},
  12. {os_mon,"CPO CXC 138 46","2.2.14"},
  13. {inets,"INETS CXC 138 49","5.9.8"},
  14. {amqp_client,"RabbitMQ AMQP Client","3.3.5"},
  15. {xmerl,"XML parser","1.3.6"},
  16. {sasl,"SASL CXC 138 11","2.3.4"},
  17. {stdlib,"ERTS CXC 138 10","1.19.4"},
  18. {kernel,"ERTS CXC 138 10","2.16.4"}]},
  19. {os,{unix,linux}},
  20. {erlang_version,
  21. "Erlang R16B03-1 (erts-5.10.4) [source] [64-bit] [async-threads:30] [hipe] [kernel-poll:true]\n"},
  22. {memory,
  23. [{total,40801504},
  24. {connection_procs,5440},
  25. {queue_procs,33376},
  26. {plugins,317304},
  27. {other_proc,13339840},
  28. {mnesia,68096},
  29. {mgmt_db,154440},
  30. {msg_index,70464},
  31. {other_ets,1251400},
  32. {binary,829760},
  33. {code,20232316},
  34. {atom,711569},
  35. {other_system,3787499}]},
  36. {alarms,[]},
  37. {listeners,[{clustering,25672,"::"},{amqp,5672,"::"}]},
  38. {vm_memory_high_watermark,0.4},
  39. {vm_memory_limit,407832166},
  40. {disk_free_limit,50000000},
  41. {disk_free,45208797184},
  42. {file_descriptors,
  43. [{total_limit,924},{total_used,3},{sockets_limit,829},{sockets_used,1}]},
  44. {processes,[{limit,1048576},{used,181}]},
  45. {run_queue,0},
  46. {uptime,39026}]
  47. ...done.

查看rabbitmq支持的插件列表

  1. [root@master rabbitmq]# rabbitmq-plugins list
  2. [e] amqp_client 3.3.5
  3. [ ] cowboy 0.5.0-rmq3.3.5-git4b93c2d
  4. [ ] eldap 3.3.5-gite309de4
  5. [e] mochiweb 2.7.0-rmq3.3.5-git680dba8
  6. [ ] rabbitmq_amqp1_0 3.3.5
  7. [ ] rabbitmq_auth_backend_ldap 3.3.5
  8. [ ] rabbitmq_auth_mechanism_ssl 3.3.5
  9. [ ] rabbitmq_consistent_hash_exchange 3.3.5
  10. [ ] rabbitmq_federation 3.3.5
  11. [ ] rabbitmq_federation_management 3.3.5
  12. [E] rabbitmq_management 3.3.5
  13. [e] rabbitmq_management_agent 3.3.5
  14. [ ] rabbitmq_management_visualiser 3.3.5
  15. [ ] rabbitmq_mqtt 3.3.5
  16. [ ] rabbitmq_shovel 3.3.5
  17. [ ] rabbitmq_shovel_management 3.3.5
  18. [ ] rabbitmq_stomp 3.3.5
  19. [ ] rabbitmq_test 3.3.5
  20. [ ] rabbitmq_tracing 3.3.5
  21. [e] rabbitmq_web_dispatch 3.3.5
  22. [ ] rabbitmq_web_stomp 3.3.5
  23. [ ] rabbitmq_web_stomp_examples 3.3.5
  24. [ ] sockjs 0.3.4-rmq3.3.5-git3132eb9
  25. [e] webmachine 1.10.3-rmq3.3.5-gite9359c7

启用trace插件

  1. [root@master rabbitmq]# rabbitmq-plugins enable rabbitmq_tracing
  2. The following plugins have been enabled:
  3. rabbitmq_tracing
  4. Plugin configuration has changed. Restart RabbitMQ for changes to take effect.

启用trace功能

  1. [root@master rabbitmq]# rabbitmqctl trace_on
  2. Starting tracing for vhost "/" ...
  3. ...done.

重启rabbitmq

  1. systemctl stop rabbitmq-server.service
  2. systemctl start rabbitmq-server.service

登录rabbitmq客户端

查看trace是否已启用
进入Admin模块,查看trace已存在,表示trace启用成功
image.png
进入Exchange模块,查看trace启用后,有增加对应topic
image.png
添加trace
输入trace名称,format类型,Pattern,添加trace,注意:publish.# (接入),deliver.#(接出) ,#.amq.directueue(指定交换机), #.myqueue(指定一个Queue)
image.png

trace日志查看

指定对应的规则,比如打印某个queue的消息日志
image.png
点击右侧日志名查看日志详情,在详情中可以查看消息报文
image.png

关闭trace,禁用trace plugin

在定位问题完毕后,记得删除对应的trace和log信息,禁用trace
关闭trace,输入:./rabbitmqctl trace_off
禁用trace,输入:./rabbitmq-plugins disable rabbitmq_tracing
image.png

确认是否禁用成功

如果禁用成功,查看Admin页面已经没有Tracing 列
image.png