protobuf + mqtt消息路由

时间:2017-02-16 16:51:54

标签: c# json protocol-buffers

所以我目前正在探索一些通过MQTT传输数据的有效方法。 JSON对我来说太大了。所以我可以跨越protobuf,这似乎适合用例。

但我遇到的问题是MQTT没有办法告诉我消息的来源。所以例如,如果我收到一条消息,我无法判断它是来自源A还是源B,在某些情况下这不是问题,但在我的情况下,这些有不同的数据,所以我不知道我的模型是什么必须用来反序列化。

我正在使用protobuf的C#实现。如果我强制它们有一个共同的字段,是否有某种方法可以部分反序列化一条消息? (messageType字段)。然后能够正确地反序列化整个消息。

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

  

MQTT没有办法告诉我消息来自哪里

当然可以。这是消息主题的目的。您将发布sourceA/messageTypeXsourceB/messageTypeY等主题。

部分反序列化意味着某种继承(所有的消息类型都实现了一个公共字段),而不是protobuf的设计方式。

  

不要去寻找类似于类继承的工具,但协议缓冲区不会这样做。

https://developers.google.com/protocol-buffers/docs/csharptutorial

答案 1 :(得分:0)

对于以后进来的人: 您的第一个路径应该是在主题中包括源和消息类型的方法。就像@Zdenek在上面说的那样。 但是,在需要进行某种类型的部分反序列化的情况下(尤其是在proto 3上),可以使用仅包含要使用的字段的消息结构(具有完全相同的数字标识符)来实现。 参见Protobuf lazy decoding of sub message

相关问题