在我们的团队中,我们通过 RabbitMQ 在两个系统之间交换消息。消息在 protobuf (v3) 中编码。我们在发送端和接收端使用 NServiceBus。我们使用 RabbitMQ 管理 UI 来监控错误队列。在生产中,我们注意到很难理解错误队列中消息的有效负载,它们是 base64 编码的。
获得对错误队列中消息的可读访问权限的最简单方法是什么?我们可以完全控制两个系统中的决策,并且还讨论了向 JSON 编码消息(而不是 protobuf)的切换。但是我们对基于 protobuf 的实现很满意。毕竟已经实现了。
最佳答案
Protobuf v3 支持格式化为 json,一旦您将数据解析为 IMessage
(内存中 protobuf
对象的基本类型)。
因此,您可以将单个消息转换为人类可读的,如下所示:
webUI
GetMessage
函数以 base64 格式获取消息,然后将其重新排队 protobuf
二进制通过 Convert.FromBase64String
IMessage
通过 ProtoMessageTypeGoesHere.Parser.ParseFrom(binaryData)
然后,您可以通过
ToString()
将解析的消息转换为 Json。或 Google.Protobuf.JsonFormatter
.只要您的错误队列不会因重新排队(例如重置时间戳或重新处理)而中断,您应该能够对队列中的所有消息执行此操作。
关于rabbitmq - 解码 RabbitMQ 有效负载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56940428/