rabbitmq - 解码 RabbitMQ 有效负载

标签 rabbitmq protocol-buffers nservicebus

在我们的团队中,我们通过 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/

    相关文章:

    c# - 我如何使用 NServiceBus 做竞争消费者

    nservicebus - 从 NServiceBus/Raven 中删除订阅者

    Swift 编译器错误?无法使用 "direct"作为方法名称

    performance - 1MB 消息的 Redis vs Kafka vs RabbitMQ

    rabbitmq - RabbitMQ 客户端如何判断它何时失去与服务器的连接?

    c++ - 在 C++ 中使用 gRPC 时未解析的外部符号

    c# - 序列化和发送 Protocol Buffers 消息

    architecture - 您如何在 Udi 风格的 SOA 架构中聚合数据?

    java - 在 spring AMQP 中使用消息监听器适配器获取消息对象

    java - 使用 protobuf 创建 kafka 消费者