protobuf + mqtt消息路由

protobuf + mqtt message routing

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

但我遇到的问题是 MQTT 无法告诉我消息的来源。因此,例如,如果我收到一条消息,在某些情况下我无法判断它是来自源 A 还是源 B必须使用反序列化。

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

感谢任何帮助。

MQTT doesn't have a way to tell me where the message come from

当然可以。这就是消息 topic 的目的。您将发布类似 sourceA/messageTypeXsourceB/messageTypeY.

的主题

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

Don't go looking for facilities similar to class inheritance, though – protocol buffers don't do that.

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

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