0

私たちは、同じテナントからのマルチテナントシステムグーグルのPubSub:古いメッセージを受信しません

  • でのIoTプロジェクトのために各デバイスをグーグルのPubSubを使用しているが「ハートビート」というメッセージごと 分を提供します。
  • 各テナントにはそれぞれ独自のトピックがあります。
  • 各デバイスには、トピックに対する独自のサブスクリプションがあります。

問題は、デバイスを数日間アンプラグしてから再び接続すると、数百のメッセージ(他のデバイスからの古いハートビート)を受信し始めます。デバイスは数分間ゆっくりと動きます。

質問です:

は、あなたがこの仕事をするための正しい方法は何だと思いますか?

  • デバイスごとに1つのトピック?
  • には、通知を消去して古いメッセージを受信しないようにする手段がありますか?

推奨事項はありません。

ありがとうございます!

答えて

1

Google Cloud Pub/Subでは、メッセージは購読期間中7日間保持されます。したがって、デバイスが再接続すると、最大7日間分のメッセージが受信されます。現在、古いメッセージをスキップする方法はありませんが、追加する予定のメッセージです。

プルサブスクリプションを使用している場合、この問題を解決する方法の1つは、Stackdriver Monitoring APIを使用してサブスクリプションのoldest_unacked_message_ageを監視するサービスを作成することです。任意のサブスクリプションが目的の時刻より古いメッセージで終了した場合、サーバーはメッセージをプルして古いメッセージを取り消すことができます。こうすると、デバイスが再起動してメッセージを再度プルすると、古いメッセージが取得されません。プッシュサブスクリプションを使用している場合、サーバーがデバイスが使用するエンドポイントを傍受することができない限り、これはうまく機能しません。

一般的なセットアップに関して、テナントとデバイスの数はいくつですか? quotas:1つのプロジェクトには10​​,000件のトピックと10,000件のサブスクリプションしかないことに注意してください。

+0

ありがとうございました! Monitoring APIをチェックします。私たちはスタートアップであり、device-> serverメッセージのために1つのメイントピックを使用します。 (すべてのテナントからのすべてのデバイスで同じトピックです)、テナントごとに1つのトピックで、サーバー→(すべての同じテナントデバイス)メッセージを実行します。 各デバイスには独自のサブスクリプションがあります。 –

+0

これは、同期プロセスを設計している間に私たちが思いついたことです。この問題の問題以外はうまくいく。私たちはPHPでGAEを使用していますが、PubSubはこれまでに試した他のすべてのソリューションからのベストなソリューションです! –

+0

トピックを削除してから同じ名前で再度作成すると、メッセージは削除されますか? –

関連する問題