用不同类型定义一个主题或为每种类型定义类型化主题更好吗?

is it better to define one topic with different types or to define typed-topic for each type?

用不同类型定义一个主题好还是为每种类型定义类型化主题好?

例如,

[topic]
foo

[message]
{
   type: 'x',
   data: [1,2,3]
}

[topic]
foo-x

[message]
{
   data: [1,2,3]
}

根据 pub/sub-pricing,鉴于发送和传递的总消息是相同的,后一种情况似乎更便宜一些,因为消息大小。

但这只是定价,我认为可能有一些经验设计或模式来定义消息。在这种情况下可以考虑什么消息?

这里没有正确或错误的答案。在某种程度上,这取决于订阅者的性质。他们是对所有类型的消息感兴趣还是只对一种类型的消息感兴趣?如果是前者,那么消息中带有该类型的单个主题可能会更好。如果是后者,那么单独订阅可能会更好。另外,你有多少种?对于几十个或更多类型,管理单个主题可能会产生大量开销。

价格可能不是一个因素。如果您的消息很大,那么价格将由消息的内容决定。如果您的消息很小,那么它们将受到每个请求 1KB 的最低计费量的限制。类型成为一个因素的唯一方法是,如果您有非常小的消息,但将它们分批处理,使它们至少为 1KB。

如果您决定对消息中的类型进行编码,请考虑将其放入消息 attributes 而不是消息数据中。这样,您可以查看类型而无需解码整个消息,如果您想立即确认某些类型的消息而不是处理它们,这会很有帮助。

倾向于第二种方案。事实上,如果你想在特定主题上插入处理(功能、云 运行、AppEngine 或其他计算平台),你可以这样做,因为主题是类型化的。

如果没有输入主题,您必须在您的流程中实施一个过滤器来完成:"If my type is X then do else exit"。你要为此付费。例如,对于函数和 Cloud 运行,您按请求和处理时间收费,100 毫秒内的最小分解 -> 对于简单的 IF

来说太多了

但是,如果您想在多个主题上插入相同的功能,则必须复制您的功能(除非您使用 HTTP 触发器)

希望对您有所帮助!