我正在为我的应用程序使用Google Cloud Pubsub。 pubsub主题的订阅者使用Javascript编写并在Nodejs上运行。我正在使用谷歌提供的官方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)
答案 0 :(得分:2)
这可能是Node.js Pub / Sub客户端库中的一个错误,其中没有在gRPC通道上设置max_receive_message_length属性。在这种情况下,“消息大小”不是指发布到Pub / Sub的消息的大小(基于maximum publish request size可以达到~10MB),而是指允许的消息大小。响应发送到gRPC中的请求。我建议在Google Cloud Platform Node.js repository中创建一个问题。
与此同时,您可以尝试将subscription上的maxInProgress属性设置为较小的数字,这会强制订阅者提取较小批量的消息,这会使响应变小。目前,如果未指定,单个响应中的最大邮件数默认为1000.但是,如果您的邮件大小很大,这可能无济于事。