Trace是Rabbitmq用于记录每一次发送的消息,方便使用Rabbitmq的开发者调试、排错。可通过插件形式提供可视化界面。
我这里主要是使用trace拿到消息内容,使用python脚本联调模拟server发送消息。
python发送MQ消息
https://blog.csdn.net/MissOfSpring/article/details/115870483
https://blog.csdn.net/MissOfSpring/article/details/115918424
https://blog.csdn.net/MissOfSpring/article/details/115918889
a) 列出本机已安装的插件:rabbitmq-plugins list(请先定位到Rabbitmq服务安装目录)
b) 启动Trace插件:rabbitmqctl trace_on (关闭Trace:rabbitmqctl trace_off)
执行如下命令:
rabbitmq-plugins enable rabbitmq_tracing
点击“Admin”菜单,右边会多出一个“Tracing”的菜单,填写Name、Format、Max payload bytes、Pattern 然后点击“添加Add trace”即可添加一个日志
Name:自定义,建议标准点容易区分
Format:表示输出的消息日志格式,有Text和JSON两种,Text格式的日志方便人类阅读,JSON的方便程序解析。
JSON格式的payload(消息体)默认会采用Base64进行编码,如上面的“trace test payload.”会被编码成“dHJhY2UgdGVzdCBwYXlsb2FkLg==”。
Max payload bytes:表示每条消息的最大限制,单位为B。比如设置了了此值为10,那么当有超过10B的消息经过Rabbit MQ流转时,在记录到trace文件的时候会被截断。如上text日志格式中“trace test payload.”会被截断成“trace test”。
Pattern:用来设置匹配的模式,和Firehose的类似。如“#”匹配所有消息流入流出的情况,即当有客户端生产消息或者消费消息的时候,会把相应的消息日志都记录下来;“publish.#”匹配所有消息流入的情况;“deliver.#”匹配所有消息流出的情况;“publish.exchange.b2b.gms.ass”只匹配发送者(Exchanges)为exchange.b2b.gms.ass的所有消息流入的情况。
最重要的是理解pattern的格式。一般来跟踪消息时会涉及到两个部分:有没有收到,有没有发出去。
官网的说法:
也就是抓publish跟着exchangename走,抓消费跟着queuename走。
================================================================================
2021-07-21 3:26:36:077: Message received
Node: rabbit@localhost
Connection: 172.16.1.230:48704 -> 172.16.1.230:5672
Virtual host: /
User: admin
Channel: 1
Exchange: AppMsgCenterDurable
Routing keys: [<<“app.ne.operation”>>]
Queue: MSGQUEUE_OTN_ADD_EDIT_NE_QUEUE
Properties: [{<<“headers”>>,table,[]}]
Payload:
{“topic”:“resource”,“operation”:“add”,“source”:“res”,“type”:“ne”,“isSouthAdd”:true,“datas”:[{“subnet”:“topo”,“symbol_id”:100000010,“main_view_id”:1,“ne_id”:100007,“symbol_style”:“1”,“create_user”:“administrator”,“res_type_name”:“NE”,“map_parent_id”:“0”,“tree_parent_id”:“0”,“symbol_name1”:“666”,“symbol_name2”:"",“symbol_name3”:"",“x”:“934”,“y”:“426”,“status_is_ping_ok”:1,“is_visible”:1,“res_id”:100007,“topo_type_id”:“11_OPCOM100-MMU12-RP”,“real_res_type_name”:“NE”,“real_res_id”:100007,“geo_lng”:123,“geo_lat”:22,“protocolController”:“5”,“userlabel”:“666”,“ip”:"",“subsystemid”:“22”,“type_userlabel”:“OPCOM100-MMU12-RP”,“ne_typename”:“OPCOM100-MMU12-RP”,“macaddress”:"",“islocal”:“0”,“ssh_port”:“22”,“telnet_port”:“23”,“longitude”:“123”,“latitude”:“22”,“location”:“瑗垮畨璞柉鍛稿伔”,“serial_no”:“SN023341edd”,“vendor”:“Raisecom2HuaWei”,“tenant”:"",“tenantName”:"",“restypename”:“NE”,“uplink_ne”:“100001”,“uplink_port_nename”:“OEO-212”,“uplink_port”:"/ne=100001/shelf=1/slot=7/card=1.1/port=1#portType=262",“uplink_port_name”:“7-PRI”,“uplink_channel”:"/ne=100001/shelf=1/slot=7/card=1.1/port=12#portType=263;/ne=100001/shelf=1/slot=7/card=1.1/port=11#portType=263;/ne=100001/shelf=1/slot=7/card=1.1/port=10#portType=263",“uplink_channel_name”:“7-C/1374.5;7-C/1367.5;7-C/1354.5”,“port”:“161”,“timeout”:“5”,“retries”:“1”,“version”:“2”,“community_read”:“public”,“community_write”:“private”,“v3contextName”:"",“v3securityName”:"",“v3securityLevel”:“noauthnopriv”,“v3authProtocol”:“MD5”,“v3authKey”:"",“v3privProtocol”:“DES”,“v3privKey”:"",“netPort”:“83”,“netTimeout”:“3”,“netRetries”:“3”,“user”:“admin”,“password”:“admin”,“poll_enabled”:0,“selfId”:0,“neid”:100007}]}