local emulated pubsub serverに対してGo pubsub libraryを使用しようとしています。 「旧式」(廃止予定)機能(例:CreateSub
およびPullWait
)が見つかりましたが、「新しいスタイル」のAPI(たとえばIterators
およびSubscriptionHandles
)が期待どおりに機能しません。"new style" google pubsub golang関数が正しく機能しない
「new style」APIを使用するアクションと「old style」APIを使用するアクションの両方をテストする2つの異なる単体テストを作成しました。
シーケンスは次のとおりです。
- が
- がメッセージ
- を公開
- は(利用可能なし以来の)任意のメッセージを引っ張って失敗するサブスクリプションを作成し、そのメッセージを引くが、それに をACKはありません
- 最後に再度プルします。これは、メッセージACKタイムアウトが最初に期限切れになるため、10秒かかるはずです。
https://gist.github.com/ianrose14/db6ecd9ccb6c84c8b36bf49d93b11bfb
古いスタイルのAPIを使用したテストでは、私が期待するのと同じように動作します:新しいスタイルのAPIを使用してテストは信頼できない作品
=== RUN TestPubSubRereadLegacyForDemo
--- PASS: TestPubSubRereadLegacyForDemo (10.32s)
pubsubintg_test.go:217: PullWait returned in 21.64236ms (expected 0)
pubsubintg_test.go:228: PullWait returned in 10.048119558s (expected 10s)
PASS
のに対し。
=== RUN TestPubSubRereadForDemo
--- PASS: TestPubSubRereadForDemo (11.38s)
pubsubintg_test.go:149: iter.Next() returned in 17.686701ms (expected 0)
pubsubintg_test.go:171: iter.Next() returned in 10.059492646s (expected 10s)
PASS
しかし、時には、私はそれが必要(とあまりにも道もはやそれは必要以上にどのように二iter.Nextに注意)としてiter.Stop()
が速やかに返さないことが判明:予想通り時には物事が動作し
=== RUN TestPubSubRereadForDemo
--- FAIL: TestPubSubRereadForDemo (23.87s)
pubsubintg_test.go:149: iter.Next() returned in 7.3284ms (expected 0)
pubsubintg_test.go:171: iter.Next() returned in 20.074994835s (expected 10s)
pubsubintg_test.go:183: iter.Stop() took too long (2.475055901s)
FAIL
そして、私は(それはインスタントの近くでなければなりません)メッセージを公開後最初のプルは時間がかかりすぎることがわかり、他の回:
=== RUN TestPubSubRereadForDemo
--- FAIL: TestPubSubRereadForDemo (6.32s)
pubsubintg_test.go:147: failed to pull message from iterator: context deadline exceeded
FAIL
任意のアイデア?新しいスタイルのAPIを使用した実際の使用例はありますか?残念ながら、Go starter project hereは廃止予定の古いAPIを使用しています。
過去数日間のコミットを引っ張った後、私は 'iter.Stop()'が期待どおりに動作しているのを見る - ありがとう。途中で終わらない最初のプルリクエスト( "A")に関するあなたのコメントに関して、それはpubsubバグですか?それとも私は回避できる何か?そういうわけで、これは私にとって地雷になるでしょう。 –
これは特にGoライブラリのプロパティではありません。メッセージを発行する前に他のメカニズムを使用してプルリクエストを作成(取り消し)すると、同じ動作が表示されます。 –