解码RabbitMQ负载

解码RabbitMQ负载,rabbitmq,protocol-buffers,nservicebus,Rabbitmq,Protocol Buffers,Nservicebus,在我们的团队中,我们通过RabbitMQ在两个系统之间交换消息。这些消息用protobuf(v3)编码。我们在发送端和接收端使用NServiceBus。我们使用RabbitMQ管理UI来监视错误队列。在生产中,我们注意到要理解错误队列中消息的有效负载并不容易,这些消息是base64编码的 获取对错误队列中消息的可读访问的最简单方法是什么?我们完全控制了这两个系统中的决策,还讨论了切换到JSON编码的消息(而不是protobuf)。但我们对基于protobuf的实现感到满意。毕竟它已经实现了。我不

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


获取对错误队列中消息的可读访问的最简单方法是什么?我们完全控制了这两个系统中的决策,还讨论了切换到JSON编码的消息(而不是protobuf)。但我们对基于protobuf的实现感到满意。毕竟它已经实现了。

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

但是,要回答您的问题:只需解码消息并替换文本,一个简单的javascript解决方案就可以了

$(“.msg负载”).text(atob($(“.msg负载”).text())
这将简单地选择RabbitMQ管理UI上队列页面上的消息字段,并将其替换为解码值(这是函数
atob

要使用它,您可以从控制台运行它,也可以将它作为书签添加到浏览器中。只需使用带有
javascript:
前缀的代码,如下所示:

javascript:$(“.msg负载”).text(atob($(“.msg负载”).text())

Protobuf v3支持将数据解析为
IMessage
(内存中
Protobuf
对象的基本类型)后的格式设置为json

因此,您可以将单个消息转换为人类可读的消息,如下所示:

  • 使用
    webUI
    GetMessage
    函数将消息获取为base64,然后重新获取它
  • 通过
    Convert.FromBase64String
  • 通过
    protomessagetypegoesher.Parser.ParseFrom(二进制数据)
然后,您可以通过
ToString()
Google.Protobuf.JsonFormatter
将解析后的消息转换为Json


只要您的错误队列不会因重新排队(例如重置时间戳或重新处理)而中断,您就应该能够对队列中的所有消息执行此操作。

这只是将base64转换为二进制,对于
protobuf
消息,这看起来类似
����..