2017-02-06 7 views
0

私のアプリケーションにGoogle Cloud Pubsubを使用しています。 pubsubトピックのサブスクライバはJavascriptで記述され、Nodejsで実行されます。私はGoogleが提供する公式の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に設定されます。ただし、メッセージのサイズが大きい場合は役立たない可能性があります。

関連する問題