pubsub 订阅者出错:超出最大消息大小
Posted
技术标签:
【中文标题】pubsub 订阅者出错:超出最大消息大小【英文标题】:Error in pubsub subscriber: Max message size exceeded 【发布时间】:2017-06-23 18:45:27 【问题描述】:我正在为我的应用程序使用 Google Cloud Pubsub。 pubsub 主题的订阅者是用 javascript 编写的,并在 Nodejs 上运行。我正在使用 google 提供的官方 pubsub 客户端。
代码如下:
var topic = gcloud.pubsub(projectId: 'myProjectId').topic('topicName');
var pubsub = gcloud.pubsub(projectId: 'myProjectId');
var sub = pubsub.subscription('subName', topic: topic);
sub.on('error', function(err) console.error(err); );
sub.on('message', messageHandler);
我的错误处理程序不断被此错误消息触发:
Error: Max message size exceeded
首先,订阅者收到一条非常奇怪的消息。如果消息太大,在发布时应该被拒绝。
更重要的是,我的订阅者似乎在某个时候死了。它会一直处理这些消息,直到出现大约 80 个错误,然后才停止。消息处理程序再也不会被调用。
我该如何解决这个问题?
将 SDK 版本更新为 0.46.1。新的错误信息:
Received message larger than max (10406691 vs. 4194304)
【问题讨论】:
【参考方案1】:这可能是 Node.js Pub/Sub 客户端库中的一个错误,其中 max_receive_message_length 属性未在 gRPC 通道上设置。在这种情况下,“消息大小”不是指发布到 Pub/Sub 的消息的大小(根据maximum publish request size,最多可达 ~10MB),而是指响应中允许的消息大小发送到 gRPC 中的请求。我建议在Google Cloud Platform Node.js repository 中创建一个问题。
与此同时,您可以尝试将subscription 上的 maxInProgress 属性设置为较小的数字,这将迫使订阅者拉取较小批量的消息,从而使响应变小。目前,如果未指定,单个响应中的最大消息数默认为 1000。但是,如果您的消息很大,这可能无济于事。
【讨论】:
以上是关于pubsub 订阅者出错:超出最大消息大小的主要内容,如果未能解决你的问题,请参考以下文章
尝试在 Google PubSub python 中创建主题订阅时出错