2017-02-06 40 views
0

我正在使用Google Cloud Pubsub作爲我的應用程序。 pubsub主題的訂閱者使用Javascript編寫,並在Nodejs上運行。我使用的是谷歌提供的官方pubsub客戶端。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

這可能是在該max_receive_message_length財產不被在GRPC通道設置Node.js的發佈/訂閱客戶端庫的錯誤。在這種情況下,「消息大小」並不是指發佈到Pub/Sub的消息的大小(根據maximum publish request size可以高達〜10MB),而是指發送到響應中的消息的大小gRPC中的請求。我會建議在Google Cloud Platform Node.js repository中創建一個問題。

與此同時,您可以嘗試將subscription上的maxInProgress屬性設置爲較小的數字,這會強制用戶拉取較小批量的消息,這會使響應更小。目前,如果未指定,單個響應中的最大消息數默認爲1000.但是,如果消息的大小很大,這可能無濟於事。

相關問題