解码RabbitMQ负载
在我们的团队中,我们通过RabbitMQ在两个系统之间交换消息。这些消息用protobuf(v3)编码。我们在发送端和接收端使用NServiceBus。我们使用RabbitMQ管理UI来监视错误队列。在生产中,我们注意到要理解错误队列中消息的有效负载并不容易,这些消息是base64编码的解码RabbitMQ负载,rabbitmq,protocol-buffers,nservicebus,Rabbitmq,Protocol Buffers,Nservicebus,在我们的团队中,我们通过RabbitMQ在两个系统之间交换消息。这些消息用protobuf(v3)编码。我们在发送端和接收端使用NServiceBus。我们使用RabbitMQ管理UI来监视错误队列。在生产中,我们注意到要理解错误队列中消息的有效负载并不容易,这些消息是base64编码的 获取对错误队列中消息的可读访问的最简单方法是什么?我们完全控制了这两个系统中的决策,还讨论了切换到JSON编码的消息(而不是protobuf)。但我们对基于protobuf的实现感到满意。毕竟它已经实现了。我不
获取对错误队列中消息的可读访问的最简单方法是什么?我们完全控制了这两个系统中的决策,还讨论了切换到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
函数将消息获取为base64,然后重新获取它GetMessage
- 通过
Convert.FromBase64String
- 通过
protomessagetypegoesher.Parser.ParseFrom(二进制数据)
ToString()
或Google.Protobuf.JsonFormatter
将解析后的消息转换为Json
只要您的错误队列不会因重新排队(例如重置时间戳或重新处理)而中断,您就应该能够对队列中的所有消息执行此操作。这只是将base64转换为二进制,对于
protobuf
消息,这看起来类似����..代码>