You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Google Pub/Sub压缩数据大小及发送前消息压缩尺寸?

获取Pub/Sub消息压缩后的大小

要在发送消息前计算PubsubMessage压缩后的大小,你可以手动模拟Publisher的压缩逻辑——因为只有当消息序列化后的原始大小超过你设置的compressionBytesThreshold时,Publisher才会启用压缩,且默认使用Gzip算法。具体步骤如下:

  1. 序列化消息并获取原始大小
    先把PubsubMessage序列化为ByteString,得到它的原始字节大小:

    ByteString serializedMessage = pubsubMessage.toByteString();
    int originalSize = serializedMessage.size();
    
  2. 判断是否触发压缩并计算压缩后大小
    如果原始大小超过你设置的阈值(100000L),就用Gzip算法手动压缩序列化后的字节,得到压缩后的大小;否则压缩后大小等于原始大小:

    long compressionThreshold = 100000L;
    long compressedSize = originalSize;
    
    if (originalSize > compressionThreshold) {
        try (ByteArrayOutputStream baos = new ByteArrayOutputStream();
             GZIPOutputStream gzipOut = new GZIPOutputStream(baos)) {
            gzipOut.write(serializedMessage.toByteArray());
            gzipOut.finish(); // 确保所有压缩数据都写入输出流
            compressedSize = baos.size();
        } catch (IOException e) {
            // 根据业务需求处理压缩异常,比如降级使用原始大小
            e.printStackTrace();
        }
    }
    
    // compressedSize 即为最终压缩后的大小
    System.out.println("消息压缩后的大小: " + compressedSize + " 字节");
    

注意事项

  • 如果你给Publisher配置了自定义压缩器(比如Snappy),需要替换对应的压缩实现,而不是Gzip。
  • 这个计算结果是近似值,和Publisher内部的压缩实现可能存在微小差异,但足以满足大部分场景的需求。

内容的提问来源于stack exchange,提问作者user2930137

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 22:50:40