解码RabbitMQ有效负载

时间:2019-07-08 18:08:17

标签: rabbitmq protocol-buffers nservicebus

在我们的团队中,我们通过RabbitMQ在两个系统之间交换消息。消息以protobuf(v3)编码。我们在发送和接收端使用NServiceBus。我们使用RabbitMQ管理UI来监视错误队列。在生产中,我们注意到要理解错误队列中以base64编码的消息的有效负载并不容易。

使人对错误队列中的消息具有可读性的最简单方法是什么?我们对这两个系统中的决策都拥有完全的控制权,并且还讨论了向JSON编码消息(而不是protobuf)的切换。但是我们对基于protobuf的实现感到满意。毕竟已经实现了。

2 个答案:

答案 0 :(得分:1)

我不建议为此使用管理UI。在我看来,一个带有脚本客户端的简单脚本或html页面将更易于使用且更防错。

但是,要回答您的问题:只需解码消息并替换文本,简单的javascript解决方案就可以正常工作。

atob

这将仅在RabbitMQ管理UI上的队列页面上选择消息字段,并将其替换为解码后的值(即函数javascript:)。

要使用此功能,可以从控制台运行它,也可以将其添加为浏览器中的书签。只需使用前缀为javascript:$(".msg-payload").text(atob($(".msg-payload").text())) 的代码,如下所示:

messageReactionAdd

答案 1 :(得分:0)

我有一个类似的问题,我通过(.net)解决了:

  • 使用webUI GetMessage函数将消息获取为base64,然后重新对其进行排队
  • 将邮件内容复制/粘贴到文件中
  • 创建引用具有proto模式的程序集的控制台应用程序
  • 阅读消息文本并使用Convert.FromBase64String进行转换
  • 通过ProtoMessageTypeGoesHere.Parser.ParseFrom()解析原始缓冲区消息

然后您可以通过ToString()将解析后的消息转换为Json(或仅使用c#调试器进行检查)。

没有内置的检查消息的方法,因为您必须使消息出队才能执行此操作-甚至在重新排队时,您也会更改消息顺序。

相关问题