首页 > 解决方案 > 获取 Google Cloud PubSub 中单条消息的大小

问题描述

我有一个设置,我将消息发布到Google Cloud PubSub服务。

我希望获得要发布到 PubSub 的每条消息的大小。因此,为此,我确定了以下方法(注意:我使用 Python 客户端进行发布和订阅,遵循其文档中提供的逐行实现):

对于我使用 Python 发布者客户端发布的如下示例消息:

{
  "data": 'Test_message',
  "attributes": {
    'dummyField1': 'dummyFieldValue1',
    'dummyField2': 'dummyFieldValue2'
  }
}

,我得到大小为 101 作为message.size订阅客户端中以下回调函数的输出:

def callback(message):
    print(f"Received {message.data}.")
    if message.attributes:
        print("Attributes:")
        for key in message.attributes:
            value = message.attributes.get(key)
            print(f"{key}: {value}")
    print(message.size)
    message.ack()

而 Cloud Console Monitoring 上显示的大小约为 79 B。 在此处输入图像描述

所以这些是我的问题:

标签: pythongoogle-cloud-platformpublish-subscribegoogle-cloud-pubsub

解决方案


关于您在发布前查看消息大小的第三个问题,计费消息大小是消息数据、属性(键加值)、时间戳的 20 个字节和message_id. 请参阅Cloud Pub/Sub 定价指南。请注意,无论消息大小如何,至少 1000 字节都是可计费的,因此如果您的消息可能小于 1000 字节,那么拥有良好的批处理设置很重要。是在message_id服务器端分配的,不保证一定大小,但它由发布调用作为未来返回,因此您可以查看示例。这应该允许您在发布者客户端中获得相当准确的消息成本估计。请注意,您还可以使用监控客户端库以从 Python 客户端中读取 Cloud Monitoring 指标。

关于您的第四个问题,无法从分布指标中提取单个数据点(除非您在查询的时间段内仅发布了一条消息,在这种情况下,平均值会告诉您该消息的大小)。


推荐阅读